Spring Boot 应用自动退出剖析

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 今天因技术群里的小伙伴们在请教关于 Spring Boot 微服务应用启动成功后自动退出问题,故特此顺便整理下,以供大家在实际的业务场景中能够有所借鉴及参考。

    今天因技术群里的小伙伴们在请教关于 Spring Boot 微服务应用启动成功后自动退出问题,故特此顺便整理下,以供大家在实际的业务场景中能够有所借鉴及参考。    

   在实际的业务场景中,我们经常会遇到如下异常提示:“Process finished with exit code x “。通常表现为:创建好的 Spring Boot 微服务项目,启动时无异常,却立马自动退出,无论基于何种方式启动均无效且控制台无任何有效信息。此类异常的处理往往较为繁琐,尤其是在无任何 Log 、无明显关键字输出的场景下,尤为让人摸不着头脑。

    那么,针对此类问题,如何能够快速定位、分析?有没有相应的针对性解决方案呢?

其实,针对每一种可能出现的场景都有其独特的处理方式,常见的案例场景,具体如下所示:

    1、 无 Spring 框架日志输出

    此类异常往往无任何线索,没有相关的日志产生

    解决策略:

   针对此类型场景,若我们直接通过启动脚本或者 java -jar 命令行启动,且无任何 Spring 相关日志。此时,需要检测启动脚本文件,启动时定义 Java 虚拟机相关内存参数及垃圾回收策略,检查其语法:内存的适配性、回收算法的匹配性、命令行正确性以及完整性等。

    举一个简单的示例,例如:当部署的 Spring Boot 微服务 运行在 4C 8G 的虚拟机之上,若我们给应用程序分配的堆内存大小超过操作系统所分配的物理内存 8G时,则其是无法启动起来的。除此之外,若启动脚本文件中所定义的年轻代与年老代 GC 策略或模型不匹配,基于特定的环境约束,也有可能是无法启动成功的。当然,命令行正确性及完整性同样也会导致如上场景异常。

    2、 Process finished with exit code 1

    此类异常通常仅输出 Spring 框架日志,即输出框架版本信息,再无其他可用信息,或者借助 Debug 可打印更多信息。具体如下所示:

   (1)引用包异常

    解决策略:

    针对此类问题,往往建议强制异常捕获并打印出来,然后再次启动,可用的信息将会显示出来,通常可能因配置文件少了某一些组件的配置,导致项目启动过程中初始化组件失败。

  (2)Yaml、POM 及 XML 文件配置异常

    解决策

    针对此类问题,着重检查文件内容“格式”的规范性、“参数”的正确性以及可能存在的组件依赖性缺失。针对版本参数正确性问题,往往在 Maven下面的 Dependencies 中的Spring Boot 的版本与 pom.xml 文件中所定义的 Spring Boot 的版本不一致,导致启动异常。针对组件依赖性,可参考如下所示:


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- 移除对Tomcat的内置依赖 -->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

    或如下,


<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
</dependency>

  (3)日志框架冲突异常

    解决策

    针对此类问题,往往因 Log4j 和 Common-logs 日志包冲突,为此,我们可通过以下方式解决,具体如下所示:

    方式1:解决冲突,排除掉 Slf4j、Common-logs 其中一方,Spring 使用 slf4j,那可以排除掉 Common-logs

    方式2:  打通Log4j 和 Common-logs,Maven 相关依赖如下所示:


<dependency>
     <groupId>org.slf4j</groupId>
     <artifactId>jcl-over-slf4j</artifactId>
</dependency>

    此依赖可以有效将 Log4j 输出到 Slf4j,从而从 Slf4j输出。

  (4)环境变量异常

    解决策略:

    针对此类异常,往往因程序启动过程中找不到对应的环境变量,无法正确加载环境配置,导致服务启动异常。此时,需要检测 Active Profiles 等相关参数正确性。具体如下所示:


#日志配置-选择一个日志输出环境
spring.profiles.active=dev

    3、 Process finished with exit code 0

    针对此类问题,主要表现为“兼容性”问题,程序往往能够正常运行,但同时出现自动退出现象,具体如下:

   (1)项目中组件依赖兼容性异常

    解决策略:

    针对此类异常,往往需要清除 Maven 工程下面的依赖,具体如下所示:


<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-tomcat</artifactId>
   <scope>provided</scope>
</dependency>

    若我们的环境不是基于 Maven工程,则需要将 spring-boot-starter-tomcat 这个包去除掉即可。

  (2)Spring Boot 不同版本兼容性异常

    解决策略:

    针对此类异常,往往需要对高版本的 Spring Boot 相关 pom.xml 进行调整,需要注意的时,以下依赖必须至少包含:


<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

   或


<dependency>
  <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>

    综上所述,基于Spring Boot 应用自动退出的相关场景案例,本文简要剖析到此为止,其他不常见的场景以及解决策略暂未在本文中描述,大家有任何问题或建议,可以随时留言、沟通。


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
打赏
0
0
0
0
12
分享
相关文章
|
1月前
|
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
76 1
|
2月前
|
Spring Boot 功能模块全解析:构建现代Java应用的技术图谱
Spring Boot不是一个单一的工具,而是一个由众多功能模块组成的生态系统。这些模块可以根据应用需求灵活组合,构建从简单的REST API到复杂的微服务系统,再到现代的AI驱动应用。
310 8
|
3月前
|
Spring框架的学习与应用
总的来说,Spring框架是Java开发中的一把强大的工具。通过理解其核心概念,通过实践来学习和掌握,你可以充分利用Spring框架的强大功能,提高你的开发效率和代码质量。
103 20
Spring AI与DeepSeek实战一:快速打造智能对话应用
在 AI 技术蓬勃发展的今天,国产大模型DeepSeek凭借其低成本高性能的特点,成为企业智能化转型的热门选择。而Spring AI作为 Java 生态的 AI 集成框架,通过统一API、简化配置等特性,让开发者无需深入底层即可快速调用各类 AI 服务。本文将手把手教你通过spring-ai集成DeepSeek接口实现普通对话与流式对话功能,助力你的Java应用轻松接入 AI 能力!虽然通过Spring AI能够快速完成DeepSeek大模型与。
786 11
Java 也能快速搭建 AI 应用?一文带你玩转 Spring AI 可观测性
Java 也能快速搭建 AI 应用?一文带你玩转 Spring AI 可观测性
174 4
Java 也能快速搭建 AI 应用?一文带你玩转 Spring AI 可观测性
Java 也能快速搭建 AI 应用?一文带你玩转 Spring AI 可观测性
Spring AI Alibaba 应用框架挑战赛圆满落幕,恭喜获奖选手
第二届开放原子大赛 Spring AI Alibaba 应用框架挑战赛决赛于 2 月 23 日在北京圆满落幕。
254 61
Java也能快速搭建AI应用?一文带你玩转Spring AI可落地性
Java语言凭借其成熟的生态与解决方案,特别是通过 Spring AI 框架,正迅速成为 AI 应用开发的新选择。本文将探讨如何利用 Spring AI Alibaba 构建在线聊天 AI 应用,并实现对其性能的全面可观测性。
1309 72
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
本文介绍了如何使用Spring AI Alibaba开发一个简单的AI对话应用。通过引入`spring-ai-alibaba-starter`依赖和配置API密钥,结合Spring Boot项目,只需几行代码即可实现与AI模型的交互。具体步骤包括创建Spring Boot项目、编写Controller处理对话请求以及前端页面展示对话内容。此外,文章还介绍了如何通过添加对话记忆功能,使AI能够理解上下文并进行连贯对话。最后,总结了Spring AI为Java开发者带来的便利,简化了AI应用的开发流程。
6182 2
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
Spring MVC:深入理解与应用实践
Spring MVC是Spring框架提供的一个用于构建Web应用程序的Model-View-Controller(MVC)实现。它通过分离业务逻辑、数据、显示来组织代码,使得Web应用程序的开发变得更加简洁和高效。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring MVC,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
360 2
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等