SpringBoot启动成功,但端口启动失败

目录

一、问题展示

二、问题分析 

2.1.端口与Tomcat的关系 

2.2.问题分析 

三、SpringBoot常见知识记录

3.1.SpringBoot项目常用jar包 

3.1.1.必要性jar包 

3.1.2.选择性jar包 

3.2.标签的作用及取值

3.2.1.compile(编译范围)

3.2.2.provided(已提供范围) 

3.2.3.runtime(运行时范围)

3.2.4.test(测试范围) 

3.2.5.system(系统范围) 

3.2.6.import(导入范围) 

3.3.POM文件中, 和  标签

3.4.POM文件中的作用


一、问题展示

         新建的项目,启动后控制台日志如图所示。可以看到SpringBoot版本(2.4.8),JDK 版本(1.8.0),电脑信息和启动用时(0.918s)等信息,但最后出现了:Process finished with exit code 0。

        "Process finished with exit code 0" 是一个常见的消息,表示你的程序或脚本已经成功执行并正常结束了。在大多数操作系统和编程环境中,退出代码(或称为返回码)用于表示程序的执行结果。退出代码 0 通常被约定为“成功”或“没有错误”的标志。 

        值得注意的是,成功执行:这意味着程序按照预期完成了所有任务,没有出现运行时错误或异常情况。而问题是,我需要项目一直启动,而不是启动后即结束,左侧蓝箭头也显示,项目也启动结束了,重新检查后,发现端口信息没找到。正确项目日志如下所示:

        两个图片对比,中间新增了端口的启动日志左侧的蓝色箭头也有变化,显示项目在启动中。

二、问题分析 

2.1.端口与Tomcat的关系 

         由上图图二可知,端口是由Tomcat启动的,在SpringBoot项目中,端口由Tomcat启动的原因与SpringBoot的核心理念和设计方式紧密相关。SpringBoot旨在简化应用的创建、配置和部署过程,而内置Tomcat(或其他嵌入式Servlet容器)是实现这一目标的重要手段之一。而端口由Tomcat启动的原因由以下几点

  1. 嵌入式Servlet容器
    SpringBoot内置了一个嵌入式的Servlet容器(默认是Tomcat),这意味着开发者无需手动下载、安装和配置外部的Servlet容器(如传统的Tomcat服务器),就可以直接运行Web应用。这种方式简化了部署流程,使得开发者只需一个“可执行的”JAR或WAR文件即可快速部署应用。

  2. 自动配置
    SpringBoot的自动配置特性会检查类路径上的依赖,并自动配置应用。当加入spring-boot-starter-web依赖时,默认也会加入Tomcat的嵌入式依赖。在SpringBoot的启动过程中,TomcatAutoConfiguration类会被自动应用(如果类路径上存在Tomcat的相关依赖且没有其他Servlet容器配置),从而创建一个TomcatServletWebServerFactory,该工厂负责配置、创建和启动Tomcat实例。

  3. 端口配置
    端口的配置可以在application.propertiesapplication.yml文件中指定,也可以在启动应用程序时通过命令行参数来指定。无论是哪种方式,这些配置信息最终都会被TomcatServletWebServerFactory用于配置Tomcat的Connector,Connector是Tomcat中负责监听端口、接收请求的组件。因此,端口的配置实际上是在Tomcat启动之前或启动过程中完成的,并由Tomcat负责监听和响应来自该端口的请求。

  4. 集成SpringMVC
    SpringBoot还通过自动配置类注册了DispatcherServlet,这是SpringMVC的核心组件之一,负责将请求分发给相应的控制器处理。由于Tomcat是SpringBoot内置的Servlet容器,因此DispatcherServlet也运行在Tomcat上,负责处理来自配置端口的HTTP请求。

2.2.问题分析 

        首先,用命令查看本地端口是否被占用

        其次,看配置文件,server.port 的端口配置是在配置文件里的。

        然后,POM排查,文件里  spring-boot-starter-web 我是缺失的,加上下面的POM配置,项目就正常启动了。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.4.8</version>
            <scope>compile</scope>
        </dependency>

        POM文件完全加载后,从Maven也可以看到,spring-boot-starter-web里是包含Tomcat的。同时也能看到,该jar集成了web和webmvc,所以也能用来处理HTTP请求(比如一个RESTful API或者Web应用)。 

三、SpringBoot常见知识记录

3.1.SpringBoot项目常用jar包 

3.1.1.必要性jar包 

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>2.4.8</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.4.8</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.4.8</version>
        </dependency>

        <!--        Mybatis的依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.3.2</version>
            <exclusions>
                <exclusion>
                    <groupId>org.mybatis</groupId>
                    <artifactId>mybatis</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!--        Mybatis-plus的依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.7</version>
        </dependency>

3.1.2.选择性jar包 

         Mysql Connector java(如果使用Mysql):如果使用Mysql,可以使用该jar进行数据库连接,并提供驱动。

<!--        数据库连接池的依赖-->
<dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.39</version>
</dependency>

        Spring Boot Starter Data JPA(如果你使用JPA):如果你打算使用JPA来访问数据库,spring-boot-starter-data-jpa是一个很好的选择,它包括了Hibernate, Spring Data JPA, 和数据库连接的依赖。

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-data-jpa</artifactId>  
    <version>2.4.8</version>  
</dependency>

        注意:由于你已经选择了MyBatis Plus,这个依赖可能不是必需的,除非你还打算同时使用JPA。

        日志框架(虽然Spring Boot默认包含):虽然Spring Boot默认使用了Logback作为日志框架,但你可能需要添加其他日志相关的依赖,比如SLF4J的绑定,但通常这不是必需的,因为Spring Boot已经为你处理了。

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>

        Spring Boot DevTools(开发时非常有用):在开发过程中,spring-boot-devtools提供了一些有用的功能,比如自动重启和快速的应用上下文重新加载。

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-devtools</artifactId>  
    <scope>runtime</scope>  
    <optional>true</optional>  
</dependency>

        安全框架(如Spring Security):如果你的应用需要安全功能(如用户认证和授权),你可能需要添加Spring Security的依赖。 

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-security</artifactId>  
    <version>2.4.8</version>  
</dependency>

        缓存框架(如Spring Cache + Redis):如果你的应用需要缓存支持,可以考虑添加Spring Cache的抽象层,并可能使用Redis作为缓存实现。 

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-cache</artifactId>  
    <version>2.4.8</version>  
</dependency>  
  
<!-- 如果使用Redis作为缓存 -->  
<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-data-redis</artifactId>  
    <version>2.4.8</version>  
</dependency>

        根据项目需求,可能还需要添加其他第三方库,比如消息队列(RabbitMQ, Kafka等)、搜索引擎(Elasticsearch)、邮件发送(Spring Boot Starter Mail)等,需要的依赖将完全取决于你的项目需求。

3.2.<scope>标签的作用及取值

        在Maven的pom.xml文件中,<scope>标签用于指定依赖项的作用范围。它决定了依赖项在项目的哪个阶段是可用的,以及是否会被打包进最终的构建产物(如JAR或WAR文件)中。<scope>有几种不同的值,每种值对应不同的用途和行为。以下是几种常见的<scope>值及其区别:

3.2.1.compile(编译范围)

        默认值:如果不指定<scope>,则默认为compile。
        用途:这个范围的依赖项在项目的编译、测试、运行阶段都是可用的。它们会被打包进最终的构建产物中。
        示例:像spring-boot-starter-web这样的依赖,因为它们是项目运行所必需的,所以通常设置为compile范围。 

3.2.2.provided(已提供范围) 

        用途:这个范围的依赖项在编译和测试阶段可用,但在运行时不需要打包进去,因为假设容器或JDK已经提供了这些依赖项。
        示例:在开发Web应用时,Servlet API和JSP API的依赖通常被设置为provided,因为Web服务器(如Tomcat)已经提供了这些库。 

3.2.3.runtime(运行时范围)

        用途:这个范围的依赖项在编译时不是必需的,但在运行和测试阶段需要。它们会被打包进最终的构建产物中。
        示例:JDBC驱动实现通常被设置为runtime范围,因为它们在编译时不是必需的,但在运行时是需要的。 

3.2.4.test(测试范围) 

        用途:这个范围的依赖项仅在测试编译和运行阶段可用,不会被打包进最终的构建产物中。
        示例:JUnit和Mockito等测试框架的依赖通常被设置为test范围。 

3.2.5.system(系统范围) 

        用途:这个范围与provided类似,但是你需要通过systemPath元素显式地指定依赖项的路径。由于它绕过了Maven的依赖解析机制,因此不推荐使用,除非在特殊情况下。
        示例:通常不推荐使用,因为它破坏了Maven的依赖管理原则。 除非,别人自定义了jar,然后在小组开发过程中,供大家集体使用这种特殊情况。

<dependency>
      <groupId>x509</groupId>
      <artifactId>x509</artifactId>
      <version>1.0</version>
      <scope>system</scope>
      <systemPath>${project.basedir}/src/main/resources/lib/x509.jar</systemPath>
</dependency>

3.2.6.import(导入范围) 

        用途:这个范围仅用于<dependencyManagement>部分,用于导入另一个POM文件中的<dependencyManagement>配置,从而允许你跨多个POM文件共享一致的依赖配置。
        示例:在Spring Boot项目中,spring-boot-dependencies POM通过<dependencyManagement>和<scope>import</scope>被导入,以提供对Spring Boot依赖项的集中管理。 

3.3.POM文件中<groupId><artifactId>和 <version> 标签

        在Maven的POM(Project Object Model)文件中,<groupId>, <artifactId>, 和 <version> 这三个标签是项目的基本坐标(coordinates),它们共同定义了Maven项目在仓库中的唯一位置。下面是每个标签的具体作用:

        <groupId>:
        作用:定义了项目属于哪个实际的Maven项目对象模型(POM)的组。这个组通常基于公司的域名反写来命名,以确保唯一性。例如,com.bypay 表示这个项目是由 bypay.com 这个公司或组织开发的。
        重要性:<groupId> 是项目坐标的重要部分,它帮助Maven识别项目所属的组或公司,以便在仓库中正确地组织和查找项目。

         <artifactId>:
        作用:定义了项目在所属组(<groupId>)中的唯一ID。这通常是项目的名称或模块名。例如,xmgj-reconciliation 可能表示这个项目或模块是关于“xmgj”的“reconciliation”(对账)功能。
        重要性:<artifactId> 与 <groupId> 一起,唯一地标识了一个Maven项目或模块。这允许Maven从仓库中精确地下载或引用该项目。

         <version>:
        作用:定义了项目的当前版本。版本号通常是按照某种约定(如主版本号.次版本号.修订号[-快照/里程碑])来编写的,以反映项目的不同发布阶段和兼容性。例如,1.0-SNAPSHOT 表示这是一个处于开发阶段(快照)的1.0版本。
        重要性:<version> 允许Maven管理项目的不同版本,确保依赖的精确性和兼容性。它还允许项目在开发过程中进行迭代和发布,而不会影响其他依赖该项目的项目。

        综上所述,<groupId>, <artifactId>, 和 <version> 这三个标签共同构成了Maven项目的唯一标识,使得Maven能够准确地定位、下载和构建项目及其依赖。

3.4.POM文件中的<build>作用

        在pom.xml文件中的<build>部分,通常包含了与构建项目相关的配置。这些配置可以指定如何编译源代码、处理资源文件、插件的配置等。对于Spring Boot项目来说,<build>部分通常会特别关注于Spring Boot Maven插件(spring-boot-maven-plugin)的配置,因为它负责将项目打包成可执行的jar或war文件。以下是一个基本的<build>部分示例,该示例展示了在Spring Boot项目中常见的配置:

<build>  
<!--  项目打成jar包后的名称,有以下两种方式,可直接命名,也可以引用命名     -->
<!--  <finalName>xmgj-reconciliation</finalName>-->
    <finalName>${project.artifactId}</finalName>
    <plugins>  
        <!-- Spring Boot Maven 插件 -->  
        <plugin>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-maven-plugin</artifactId>  
            <!-- 这里通常不需要指定版本号,因为Spring Boot的starter-parent已经管理了它 -->  
              
            <!-- 插件配置 -->  
            <configuration>  
                <!-- 可选的配置项,比如指定mainClass,但通常不是必需的,因为Spring Boot插件可以自动找到 -->  
                <!-- <mainClass>com.example.MyApplication</mainClass> -->  
                  
                <!-- 其他可能的配置,如打包时排除某些文件或目录 -->  
                <!-- <excludes>  
                    <exclude>  
                        <groupId>org.group</groupId>  
                        <artifactId>artifact</artifactId>  
                    </exclude>  
                </excludes> -->  
                  
                <!-- 启用/禁用重新打包 -->  
                <!-- <repackage>true</repackage> -->  
                  
                <!-- 其他插件特定的配置项 -->  
            </configuration>  
              
            <!-- 插件执行的阶段,通常不需要指定,因为Spring Boot插件默认绑定到了一些生命周期阶段 -->  
            <!-- <executions>  
                ...  
            </executions> -->  
        </plugin>  
          
        <!-- 其他插件配置,如编译插件、资源插件等 -->  
        <!-- version:指定插件版本,但Spring Boot的starter-parent可能已经管理了它 --> 
        <!-- source:Java源代码版本 --> 
        <!-- target:目标Java版本 -->  
        <!--  
        <plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-compiler-plugin</artifactId>  
            <version>2.4.8</version> 
            <configuration>  
                <source>1.8</source>   
                <target>1.8</target> 
            </configuration>  
        </plugin>  
        -->  
    </plugins>  
      
    <!-- 其他构建相关的配置,如资源文件配置 -->  
    <resources>  
        <resource>  
            <directory>src/main/resources</directory>  
            <!-- 可选的配置,比如过滤文件等 -->  
            <!-- <filtering>true</filtering> -->  
        </resource>  
    </resources>  
</build>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/879084.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Maya---机械模型制作

材质效果&#xff08;4&#xff09;_哔哩哔哩_bilibili 三角面 四边面 多边面 *游戏允许出现三角面和四边面 游戏中一般是低模&#xff08;几千个面&#xff09; 动漫及影视是高模 机械由单独零件组合而成&#xff0c;需独立制作 低面模型到高面模型 卡线是为了将模型保…

[JavaEE] 网络初识(网络通信 及 TCP / UDP / IP 封装分用 )

Author&#xff1a;MTingle major:人工智能 --------------------------------------- Build your hopes like a tower! 文章目录 目录 文章目录 一. 网络通信基础 1. 局域网LAN 2. ⼴域⽹WAN 3. IP地址 4. 端口号 二.协议 1. 五元组 2. 协议分层 协议分层的优点: 3. OSI七层协…

mongoDB-1

文章目录 一、疑似坑1.11.2 mongo ops manager1.3 mongo features视图固定大小集合&#xff08;有点类似ringbuffer数据结构&#xff0c;capped collections&#xff09;(聚簇集合)clustered collection(类比到Mysql的聚簇索引)聚合管道 aggregation pipelineWiredTiger (默认存…

STM32中的计时与延时

前言 在裸机开发中,延时作为一种规定循环周期的方式经常被使用,其中尤以HAL库官方提供的HAL_Delay为甚。刚入门的小白可能会觉得既然有官方提供的延时函数,而且精度也还挺好,为什么不用呢?实际上HAL_Delay中有不少坑,而这些也只是HAL库中无数坑的其中一些。想从坑里跳出来…

【3D打印】使用simplify 3D切片更改Gcode手动断电续打、掉电、未打完继续打印、补救

一、问题描述 有些时候会遇到3D打印机没料但机器还在继续打、掉电重启后未正常恢复打印、挤出机端没有料但断料检测未触发等情况。我们又不想打印放弃&#xff0c;但又想继续之前的进度打印。 这时候我们需要更改3D打印文件的Gcode参数来进行继续打印。 至于什么是Gcode&…

帕金森遗传给子女的概率大吗?揭开真相,守护健康未来

在健康话题日益受到关注的今天&#xff0c;帕金森病这一神经系统疾病常常引发公众的广泛讨论。尤其是当谈及帕金森病是否会遗传给子女时&#xff0c;许多家庭都充满了担忧和疑惑。那么&#xff0c;帕金森病遗传给子女的概率究竟有多大&#xff1f;今天&#xff0c;我们就来揭开…

2024 年浙江省网络安全行业网络安全运维工程师项目 职业技能竞赛网络安全运维工程师(决赛样题)

2024年浙江省网络安全行业网络安全运维工程师项目 职业技能竞赛网络安全运维工程师&#xff08;决赛样题&#xff09; 应急响应&#xff1a;1 通过流量分析&#xff0c;找到攻击者的 IP 地址2 找到攻击者下载的恶意文件的 32 位小写 md5 值3 找到攻击者登录后台的 URI4 找到攻击…

Unity 给模型贴上照片

Unity将真实世界的照片贴图到模型上 原因 模拟仿真&#xff0c;直接使用照片肯定是效果最好的&#xff0c;省下做材质了 直接拖动即可 导入图片到Unity中将图片修改为Sprite模式直接将图片拖动到Scene面板的物体上即可 注意&#xff1a;是将图片拖动到Scene面板的物体上&a…

婚礼弹幕上墙阳光正好,爱意正浓,打造一场出圈的唯美婚礼!

原文地址 婚礼现场的弹幕功能可以给整个场景增添温暖和喜庆的氛围。通过手机发送祝福&#xff0c;让亲友可以即时将祝福传达给新人&#xff0c;同时这些祝福以弹幕的形式在大屏幕上滚动展示&#xff0c;增加了现场互动的乐趣。墙上新闻搭配的功能则更加抢眼&#xff0c;不仅可…

k8s中的存储

目录 一 configmap 1.1 configmap的功能 1.2 configmap的使用场景 1.3 configmap创建方式 1.3.1 字面值创建 1.3.2 通过文件创建 1.3.3 通过目录创建 1.3.4 通过yaml文件创建 1.3.5 configmap的使用方式 1.3.5.1 使用configmap填充环境变量 1.3.5.2 通过数据卷使用c…

kubernetes技术详解,带你深入了解k8s

目录 一、Kubernetes简介 1.1 容器编排应用 1.2 Kubernetes简介 1.3 k8s的设计架构 1.3.1 k8s各个组件的用途 1.3.2 k8s各组件之间的调用关系 1.3.3 k8s的常用名词概念 1.3.4 k8s的分层结构 二、k8s集群环境搭建 2.1 k8s中容器的管理方式 2.2 k8s环境部署 2.2.1 禁用…

定位HardFault

一、HardFault定义 STM32出现HardFault_Handler硬件错误的原因主要有两个方面&#xff1a; 1、内存溢出或者访问越界。&#xff08;包括使用野指针&#xff09; 2、堆栈溢出。 二、定位HardFault步骤 1. 判断所使用堆栈&#xff1a; 发生异常之后可首先查看LR寄存器中的值…

SAP B1 单据页面自定义 - 用户界面编辑字段

背景 接《SAP B1 基础实操 - 用户定义字段 (UDF)》&#xff0c;在设置完自定义字段后&#xff0c;如下图&#xff0c;通过打开【用户定义字段】可打开表单右侧的自定义字段页。然而再开打一页附加页面操作繁复&#xff0c;若是客户常用的定义字段&#xff0c;也可以把这些用户…

pytest 接口测试

pytest 核心重点 读取excel&#xff08;xfile --> read&#xff09; 函数循环执行( pytest 装饰器&#xff0c;自动解析&#xff0c;一个个单独执行&#xff09; 接口关联&#xff08;Template 处理参数变量&#xff09; pytest 是什么 .py文件名 用 test_开头&#xff0c;…

【计算机网络】HTTP相关问题与解答

此篇文章内容会不定期更新&#xff0c;仅作为学习过程中的笔记记录 目录 一、HTTP请求和响应报文是怎样的&#xff1f; 1、请求报文 2、响应报文 二、HTTP请求方法有哪些&#xff1f; GET HEAD POST PUT DELETE PATCH OPTIONS TRACE CONNECT 三、GET请求与POST请…

linux cmake版本升级教程(Centos7)

有时候,当前系统的cmake版本,并一定能满足编译要求,所以需要进行升级到高于某个版本才能正常编译。本章教程,主要在centos7上进行升级cmake版本。 一、查看当前的cmake版本 cmake --version二、下载指定版本的cmake wget https://github.com/Kitware/CMake/releases/down…

Element UI:初步探索 Vue.js 的高效 UI 框架

Element UI&#xff1a;初步探索 Vue.js 的高效 UI 框架 一 . ElementUI 基本使用1.1 Element 介绍1.2 Element 快速入门1.3 基础布局1.4 容器布局1.5 表单组件1.6 表格组件1.6.1 基础表格1.6.2 带斑马纹表格1.6.3 带边框表格1.6.4 带状态的表格 1.7 导航栏组件讲解 二 . 学生列…

安装WINDOWS微软商店已下架的WSL系统,以UBUNTU 16.04 为例

下载WSL系统 方法1&#xff1a;POWERSHELL 用powershell下载 PowerShell Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1604 -OutFile Ubuntu.appx -UseBasicParsing 1 如果下载时间很长&#xff0c;可以这样把进度条关闭&#xff1a; $ProgressPreference Silentl…

计算机人工智能前沿进展-大语言模型方向-2024-09-12

计算机人工智能前沿进展-大语言模型方向-2024-09-12 1. PharmaBench: Enhancing ADMET benchmarks with large language models Z Niu, X Xiao, W Wu, Q Cai, Y Jiang, W Jin, M Wang… - Scientific Data, 2024 大语言模型在药物发现中的应用&#xff1a;PharmaBench 文章由…

vue 实现tab菜单切换

1、目标&#xff1a; 实现切换tab菜单&#xff0c;激活状态&#xff0c;按钮高亮&#xff0c;显示对应的菜单内容 2、实现 <template><div class"tan_menu"><ul class"container"><liclass"item"v-for"item in tab…