• Web server failed to start. Port 8080 was already in use


    我的其他相关文章通过netstat命令查看Linux的端口占用 2023-11-6 19:29:09

    一、问题

    package com.djc.boot;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @author JIACHENGER
     * @Description 配置springboot、jenkins、gitlab自动化部署测试项目
     * @since 10/6/2023 3:54 下午
     */
    
    
    /*
     * 2023-10-6 16:28:13
     * #@RestController是一个合成注解,由@ReponseBody和@Controller合成,具有两个注解的功能。
     * #@ReponseBody:给浏览器返回纯文本。
     *
     * 2023-10-6 16:29:16
     * 关于我们的MyApplication类是 @Rest控制器。这称为刻板印象注释。它为阅读代码的人提供了提示,并为Spring提供了类扮演特定角色的提示。
     * 在这种情况下,我们的类是一个web@Controller,所以Spring在处理传入的web请求时会考虑它。
     *
     *这个@RequestMapping注释提供了“路由”信息。它告诉Spring /路径应映射到home方法 @Rest控制器注释告诉Spring将结果字符串直接返回给调用者。
     *
     *
     * @SpringBootApplication
     * 第二个类级注释是@SpringBootApplication。此注释称为元注解,它结合了@SpringBootConfiguration ,
     * @enableautoconfiguration和@ComponentScan .
     * 其中,我们最感兴趣的注释是@EnableAutoConfiguration .@enableautoconfiguration告诉Spring Boot根据您添加的jar依赖项
     * “猜测”您想要如何配置Springspring-boot-starter-web添加了Tomcat和Spring MVC,自动配置假定您正在开发web应用程序并相应
     * 地设置Spring。
     *
     *
     *
     */
    @RestController
    @SpringBootApplication
    public class MainApplication {
        @RequestMapping("/")
        String home() {
            return "Hello World! 2023-10-6 16:42:14 DJCKING *** ";
        }
    
        public static void main(String[] args) {
            SpringApplication.run(MainApplication.class, args);
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    在这里插入图片描述

    二、解决

    2.1 方法1-结束进程对8080端口的占用

    参考我这篇文章的命令 Error running ‘Tomcat 8.5.29‘ Address localhost:1099 is already in use

    //1-查看端口占用,根据端口号8080,获取PID(进程ID)
    netstat -ano | findstr "端口号"
    netstat -ano | findstr "8080"
    
    //查看PID对应的进程
    tasklist | findstr "进程ID"
    
    
    //2-根据PID结束进程
    taskkill /F /PID PID值
    或者
    
    taskkill -f -pid PID值
    
    或者(可能会直接结束intellij IDEA,相当于任务管理器中结束intellij IDEA  2023-10-6 16:56:00 补充)
    taskkill  /f /t /im PID值
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    注意:执行taskkill /F /PID 22096taskkill -f -pid 22096taskkill /f /t /im 22096 可能会直接结束Intellij IDEA应用
    在这里插入图片描述

    2.2 方法2-更换Tomcat默认端口

    SpringBoot 内置了 Tomcat服务器 ,所以不能直接在IDE中配置Tomcat的端口,可以通过配置文件的方式来指定Tomcat的端口。

    在项目目录下的src/main/resources中新建application.properties文件,配置Tomcat端口8090

    #符号表示注释
    #application.properties配置文件中指定Tomcat端口,解决8080 端口占用问题
    #application.properties与application.yml两个配置文件二选一
    server.port=8090
    
    • 1
    • 2
    • 3
    • 4

    运行结果
    在这里插入图片描述
    在这里插入图片描述

    或者

    在项目目录下的src/main/resources中新建application.yml文件,配置Tomcat端口8091

    #符号表示注释
    #application.yml与application.properties两个配置文件二选一
    #Tomcat
    server:
      port: 8091
    
    • 1
    • 2
    • 3
    • 4
    • 5

    运行结果
    在这里插入图片描述
    在这里插入图片描述

    三、代码中设置端口

    setDefaultProperties()方法将server.port设置为8010。接受一个Map类型键值对参数,其中key属性名value属性值

    关键设置端口代码:

     //通过代码设置端口  2023-10-6 23:25:24
            SpringApplication sapp = new SpringApplication(MainApplication.class);
            sapp.setDefaultProperties(Collections.singletonMap("server.port", "8010"));
            sapp.run(args);
    
    • 1
    • 2
    • 3
    • 4

    完整代码:

    package com.djc.boot;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.Collections;
    
    /**
     * @author JIACHENGER
     * @Description 配置springboot、jenkins、gitlab自动化部署测试项目
     * @since 10/6/2023 3:54 下午
     */
    
    
    /*
     * 2023-10-6 16:28:13
     * #@RestController是一个合成注解,由@ReponseBody和@Controller合成,具有两个注解的功能。
     * #@ReponseBody:给浏览器返回纯文本。
     *
     * 2023-10-6 16:29:16
     * 关于我们的MyApplication类是 @Rest控制器。这称为刻板印象注释。它为阅读代码的人提供了提示,并为Spring提供了类扮演特定角色的提示。
     * 在这种情况下,我们的类是一个web@Controller,所以Spring在处理传入的web请求时会考虑它。
     *
     *这个@RequestMapping注释提供了“路由”信息。它告诉Spring /路径应映射到home方法 @Rest控制器注释告诉Spring将结果字符串直接返回给调用者。
     *
     *
     * @SpringBootApplication
     * 第二个类级注释是@SpringBootApplication。此注释称为元注解,它结合了@SpringBootConfiguration ,
     * @enableautoconfiguration和@ComponentScan .
     * 其中,我们最感兴趣的注释是@EnableAutoConfiguration .@enableautoconfiguration告诉Spring Boot根据您添加的jar依赖项
     * “猜测”您想要如何配置Springspring-boot-starter-web添加了Tomcat和Spring MVC,自动配置假定您正在开发web应用程序并相应
     * 地设置Spring。
     *
     *
     *
     */
    @RestController
    @SpringBootApplication
    public class MainApplication extends SpringBootServletInitializer {
        @RequestMapping("/")
        String home() {
            return "Hello World! 2023-10-6 16:42:14 DJCKING *** ";
        }
    
        public static void main(String[] args) {
    
            //SpringApplication.run(MainApplication.class, args);
    
            //通过代码设置端口  2023-10-6 23:25:24
            SpringApplication sapp = new SpringApplication(MainApplication.class);
            sapp.setDefaultProperties(Collections.singletonMap("server.port", "8010"));
            sapp.run(args);
    
    
        }
    
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62

    运行结果
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    四、docker部署

    如果将项目部署在Docker容器中,需要Dockerfile中设置EXPOSE指令以指定端口。
    如下网关服务-gateway.jar

    # 基础镜像
    FROM  anapsix/alpine-java:8_server-jre_unlimited
    # author
    MAINTAINER djc
    
    # 挂载目录
    VOLUME /home/ruoyi202381
    
    # 创建目录
    RUN mkdir -p /home/ruoyi202381
    
    # 指定路径  指定工作目录
    WORKDIR /home/ruoyi202381
    
    # 复制jar文件到路径
    COPY ./jar/gateway.jar /home/ruoyi202381/gateway.jar
    
    
    # 暴露端口  2023-9-29 00:02:07
    #  EXPOSE  端口号  例如:EXPOSE  8104
    EXPOSE  8096
    
    # 启动用户服务    网关服务
    ENTRYPOINT ["java","-jar","gateway.jar"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    温馨浪漫HTML表白爱情源码大气简洁单页源码(html生日快乐网站制作)
    2022年8月最新运维面试题-服务器上下架流程
    Core-1684JD4八核高算力AI核心板
    Vulkan渲染引擎开发教程 一、开发环境搭建
    Spring目录结构和基础JAR包介绍
    PPT录屏怎么录?PPT录屏,3种方法简单操作
    智能控制理论及应用 王耀南等编著
    一文了解DataStore(Preferences)
    BI设计上篇 - 像设计师一样思考
    ElasticSearch+ES HEAD安装详细教程
  • 原文地址:https://blog.csdn.net/qyfx123456/article/details/133623844