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

news2025/1/9 16:48:03

目录

一、问题展示

二、问题分析 

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>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

爵士编曲:爵士鼓编写 爵士鼓笔记 底鼓和军鼓 闭镲和开镲 嗵鼓

底鼓和军鼓 底鼓通常是动的音色&#xff0c;军鼓通常是大的音色。 “动”和“大”构成基础节奏。“动大”听着不够有连接性&#xff0c;所以可以加入镲片&#xff01; 开镲 直接鼓棒敲击是开镲音色 闭镲 当脚踩下踏板&#xff0c;2个镲片合并&#xff0c;然后用鼓棒敲击&am…

Koa安装和应用

文章目录 1、Koa21.1 简介1.2 安装1.3 简单使用1.4 使用脚手架创建Koa项目 1、Koa2 1.1 简介 Koa 是一个新的 web 框架&#xff0c;由 Express 幕后的原班人马打造&#xff0c; 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async…

rust快速创建Tauri App ——基于create-tauri-app

Tauri App Tauri是一个工具包&#xff0c;可以帮助开发人员使用现有的几乎任何前端框架为主要桌面平台制作应用程序。核心是用Rust构建的&#xff0c;CLI利用Node.js使Tauri成为创建和维护优秀应用程序的真正多语言方法。 cargo install create-tauri-appcreate-tauri-app&am…

多版本node管理工具nvm

什么是nvm&#xff1f; 在项目开发过程中&#xff0c;使用到vue框架技术&#xff0c;需要安装node下载项目依赖&#xff0c;但经常会遇到node版本不匹配而导致无法正常下载&#xff0c;重新安装node却又很麻烦。为解决以上问题&#xff0c;nvm&#xff1a;一款node的版本管理工…

FSFP——专为蛋白质工程设计的少样本学习策略

论文地址&#xff1a;通过小样本学习&#xff0c;以最少的湿实验室数据提高蛋白质语言模型的效率 参考文献&#xff1a;AI蛋白质设计“新引擎”:FSFP驱动大模型超低采样学习,少量数据显著提升蛋白质语言模型的性能 前言介绍&#xff1a;上海交通大学自然科学研究院洪亮教授课…

在STM32工程中使用Mavlink与飞控通信

本文讲述如何在STM32工程中使用Mavlink协议与飞控通信&#xff0c;特别适合自制飞控外设模块的项目。 需求来源&#xff1a; 1、增稳云台里的STM32单片机需要通过串口接收飞控传来的云台俯仰、横滚控制指令和相机拍照控制指令&#xff1b; 2、自制的有害气体采集器需要接收飞…

PCL 曲线点云提取

文章目录 一、简介二、实现代码三、实现效果参考文献一、简介 提取曲线点云的方法主要分为两种:参数化与非参数化,其中参数化是指事先直线曲线的形状,反之,非参数化则是不依赖与曲线的参数,通常是一种聚类的行为。这里我们采用非参数方法(TriplClust),将点集划分为一个未…

Java ETL - Apache Beam 简介

基本介绍 Apache Beam是一个用于大数据处理的开源统一编程模型。它允许用户编写一次代码&#xff0c;然后在多个批处理和流处理引擎上运行&#xff0c;如Apache Flink、Apache Spark和Google Cloud Dataflow等。Apache Beam提供了一种简单且高效的方式来实现数据处理管道&…

上海儿童自闭症寄宿制学校,让孩子找到归属感

在探讨自闭症儿童教育的广阔图景中&#xff0c;上海作为一座充满人文关怀的城市&#xff0c;始终致力于为这些特殊的孩子提供更加全面、专业的支持体系。而当我们把这份关注与努力投射到具体实践上&#xff0c;广州的星贝育园自闭症儿童寄宿制学校便成为了这样一个温馨而有力的…

蓝桥杯DS18B20程序源码

蓝桥杯DS18B20程序源码解析 蓝桥杯&#xff0c;作为一项全国瞩目的电子设计竞赛&#xff0c;其核心挑战在于参赛者需深度融合单片机编程与各类电子元件的应用能力。在众多项目中&#xff0c;涉及DS18B20数字温度传感器的程序源码尤为引人注目&#xff0c;它巧妙地将单片机技术…

ollama安装(ubuntu20.04)

Ollama是一款开源的自然语言处理工具&#xff0c;它可以帮助开发者快速构建文本处理应用。 ollama官网: https://ollama.ai/ 一、ollama 自动安装 linux统一采用sh脚本安装&#xff0c;一个命令行搞定。 curl -fsSL https://ollama.com/install.sh | sh二、ollama 手动安装 o…

使用 OpenCV 和 Matplotlib:绘制其彩色直方图以及拓展

如何使用 OpenCV 和 Matplotlib 读取、处理并显示图像。即将为您解答&#xff1a; 绘制其彩色直方图 代码解释 读取图像并转换颜色空间&#xff1a; image cv2.imread(001.jpg) image_rgb cv2.cvtColor(image, cv2.COLOR_BGR2RGB)cv2.imread(001.jpg)&#xff1a;从文件中…

C#基于SkiaSharp实现印章管理(7)

印章中的文本主要分为两种&#xff1a;1&#xff09;从左向右水平绘制的文本&#xff1b;2&#xff09;沿指定路径绘制的文本。前者使用SKCanvas的DrawText绘制文本&#xff0c;后者则使用SKCanvas的DrawTextOnPath绘制文本。   针对上述情况&#xff0c;调整SealElement类型…

Python编码系列—Python代理模式:为对象赋予超能力的魔法

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

【自学笔记】支持向量机(2)——核函数

引入 核函数的功能是将一组数据映射到更高维的特征空间&#xff0c;这样可以让在低维无法线性分类的数据能够在高维空间下被分类。   可以证明&#xff0c;如果原始数据是有限的维度&#xff0c;那么一定存在一个高维特征空间使得样本线性可分。 文章内容由《机器学习》相关内…

地平线秋招2025

【地平线秋招】 中秋卷起来&#xff01;&#xff01;&#xff01; 内推码 kbrfck 内推码 kbrfck 内推码 kbrfck 投递链接&#xff1a;https://wecruit.hotjob.cn/SU62d915040dcad43c775ec12c/mc/position/campus?acotycoCodekbrfck&recruitType1&isLimitShowPostScope…

Ubantu和Centos7一键shell更换镜像源与Linux系统Python3环境安装

目录 前言 1.一键更换源 1.1 创建文件 1.2 向环境赋予可执行的权限 2.Linux系统配置Python3环境 2.1 查看当前python环境 2.2 更换源 2.3 安装所需的依赖 2.4.下载python环境文件 2.5.解压文件 2.6 进行编译 2.7 开始安装 2.8 设置软连接 2.9 测试是否安装成功…

苍穹外卖Day01-2

导入接口文档 yApi接口管理平台http://api.doc.jiyou-tech.com/ 创建项目 导入接口文件 导入结果界面 Swagger 介绍 使用Swagger你只需要按照它的规范去定义接口及接口相关的信息&#xff0c;就可以做到生成接口文档&#xff0c;以及在线接口调试页面。 官网&#xff1a;ht…

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

计算机人工智能前沿进展-大语言模型方向-2024-09-16 1. Securing Large Language Models: Addressing Bias, Misinformation, and Prompt Attacks B Peng, K Chen, M Li, P Feng, Z Bi, J Liu, Q Niu - arXiv preprint arXiv:2409.08087, 2024 保护大型语言模型&#xff1a;…

走进低代码表单开发(三):高效业务功能构建

前面我们已经介绍了勤研低代码开发平台的页面设计相关的内容&#xff0c;当页面设计完成后&#xff0c;我们将继续进行表单的功能开发&#xff0c;接下来&#xff0c;我们一起走进勤研低代码开发平台高效便捷的表单功能设计&#xff0c;来看看勤研低代码平台如何为用户带来全新…