讲解SpringBoot打印启动时异常堆栈信息的完整攻略,具体步骤如下:
1. 开启Debug模式
在SpringBoot启动类中,添加以下代码:
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
// 开启Debug模式
System.setProperty("debug", "true");
SpringApplication.run(DemoApplication.class, args);
}
}
2. 打印堆栈信息
在应用启动时,如果存在异常信息,可以通过日志打印堆栈信息。可以通过在 application.yml
(或者 application.properties
)文件中配置相应的日志级别,以打印对应的堆栈信息。如下所示:
# 配置日志级别
logging:
level:
root: error # 根日志级别为error,只记录error级别及以上的日志信息
org.springframework.web: debug # 打印SpringWeb相关的所有debug级别日志信息
org.hibernate: debug # 打印Hibernate相关的所有debug级别日志信息
org.mybatis: debug # 打印MyBatis相关的所有debug级别日志信息
以上配置会将SpringWeb、Hibernate和MyBatis相关的所有debug级别的日志信息输出到控制台,包括对应的堆栈信息。
示例说明
为了便于理解,下面以两个具体的示例来说明如何打印启动时的异常堆栈信息。
示例一:数据库连接异常
假设应用启动时,连接MySQL数据库失败,那么可以打印出如下的堆栈信息:
2019-07-16 15:45:36.923 ERROR 80656 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization.
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_171]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_171]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_171]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_171]
...
可以看到,在连接MySQL数据库时,出现了通信异常,而这个异常被打印在堆栈信息中,供开发者调试使用。
示例二:Bean初始化异常
假设应用启动时,某个Bean的初始化出现了异常,那么可以打印出如下的堆栈信息:
2019-07-16 15:55:51.239 ERROR 81218 --- [ main] o.s.b.SpringApplication : Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myTask' defined in file [/Users/apple/workspace/demo/target/classes/com/example/demo/schedule/MyTask.class]: Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: Fixed rate must be positive as a non-zero value
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:591) ~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) ~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) ~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
...
可以看到,某个Bean的初始化出现了异常,原因是Fixed rate必须是正数。
通过上述两个示例,我们可以清楚地了解如何打印SpringBoot应用启动时的异常堆栈信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot打印启动时异常堆栈信息详解 - Python技术站