【发布时间】:2021-07-15 09:39:02
【问题描述】:
我在根据自动配置开发自己的组件时遇到一个问题,并且需要一些关键参数。
所以我的组件中有一个检查方法,用@PostConstruct 注释
如果配置错误,我希望这种方法能够立即打印错误日志并关闭应用程序,就像我在 springboot 的基本配置中设置错误一样。
但事实是,在使用SpringApplication.exit(applicationContext)关闭应用程序时,应用程序将保持运行并卡在某个地方而不会关闭。
异常轨迹如下图:
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-07-15 17:37:28.623 [app:application-center,traceId:,spanId:,parentId:] [main] ERROR | SpringApplication.java:837 | o.s.boot.SpringApplication | Application run failed
java.lang.IllegalStateException: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@320494b6 has been closed already
at org.springframework.context.support.AbstractApplicationContext.assertBeanFactoryActive(AbstractApplicationContext.java:1093)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1108)
at org.springframework.cloud.context.scope.refresh.RefreshScope.eagerlyInitialize(RefreshScope.java:127)
at org.springframework.cloud.context.scope.refresh.RefreshScope.start(RefreshScope.java:118)
at org.springframework.cloud.context.scope.refresh.RefreshScope.onApplicationEvent(RefreshScope.java:112)
at org.springframework.cloud.context.scope.refresh.RefreshScope.onApplicationEvent(RefreshScope.java:66)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:404)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:361)
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:898)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:554)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
at com.myapp.applicationcenter.Application.main(Application.java:24)
【问题讨论】:
-
升级到 Spring Boot 2.5.2 进行修复。见github.com/spring-projects/spring-boot/issues/27049
标签: java spring-boot spring-boot-actuator