下面是关于“SpringBoot启动后卡住无日志的几种情况小结”完整攻略:
问题背景
在使用SpringBoot开发JavaWeb应用时,有时候可能会遇到启动后卡住无日志的情况,导致我们无法知道整个启动过程的具体信息。这种情况通常有以下几种原因:
- 应用启动卡在某个点,等待某个线程执行完成
- 应用启动时出现了未捕获的异常
- 应用启动时依赖的外部服务出现了故障
接下来我们将详细讲解如何解决这些问题。
场景一:应用启动卡在某个点
症状
- 应用启动后日志输出停止,无任何异常信息
- 控制台输出类似于以下样式,且不再继续输出任何信息:
2018-12-17 16:26:44.901 INFO 81876 --- [f61d16dc-1]) o.s.web.servlet.DispatcherServlet :
解决方法
通过调整日志级别来查看哪个类卡住了应用。在 application.properties
文件中添加以下配置:
logging.level.root=DEBUG
然后,重新启动应用。应用启动完毕后,查找日志,找到最后一条日志记录,查看该记录的所在类,找到该类所在的包,并修改该包的日志级别为 DEBUG 级别。重启应用,查看日志,就可以发现卡住的类并定位问题了。
场景二:应用启动时出现了未捕获的异常
症状
- 应用启动后控制台无任何日志输出
- 可以使用 ps -ef | grep java 命令检查进程是否存在
- 如果进程存在则可以通过 jstack
命令获取应用的线程信息
解决方法
通过查看线程信息来定位应用启动时的异常。在终端中执行以下命令,获取Java应用的进程号:
ps -ef | grep java
然后执行以下命令,获取应用的线程信息:
jstack <PID>
这时,会输出大量的线程信息,其中可能会包含异常堆栈信息。通过查找异常堆栈信息,以及查看代码和配置文件,我们可以找到问题出在哪里,然后进行修复。
场景三:应用启动时依赖的外部服务出现了故障
症状
- 应用启动后控制台无任何日志输出
- 控制台会输出一条类似于“Waiting for service to start”的信息,并持续等待
- 应用启动后不能访问某些外部服务
解决方法
对于这种情况,需要检查应用依赖的外部服务是否可以正常访问。可以通过以下方法判断外部服务是否正常:
- 直接在浏览器中访问服务地址,检查是否能够正常响应
- 在应用启动之前手动访问所依赖的服务,并检查是否返回了正确的响应
如果外部服务出现故障,则需要等待外部服务恢复正常,才能重新启动应用。
示例解决方法
假设我们在使用 Spring Boot 开发 Web 服务时遇到了启动失败的问题,通过调整日志级别后,发现应用启动是卡在某个 Controller 上,无法继续执行。我们在检查代码后,发现是因为该 Controller 依赖的外部服务无法提供正常的服务,导致应用启动卡住无法继续。
我们可以通过手动访问外部服务,查看其响应情况,或者等待外部服务恢复正常再次启动应用,解决这个问题。
总结
在开发 Spring Boot 项目时,可能会遇到应用启动卡住无日志输出的问题。通过以上的攻略,我们可以快速地解决这些问题。在解决问题时,需要结合具体情况进行判断和处理,才能更好地定位问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot启动后卡住无日志的几种情况小结 - Python技术站