我有一个Spring Boot应用程序,它有一些外部依赖项(例如,项目外部需要存在的文件,以便应用程序正常启动)。
我的一个bean有一个@PostConstruct
方法进行初始化。如果初始化不成功,我想干净利落地退出 - 例如,找不到文件。
在((ConfigurableApplicationContext)applicationContext).close();
方法中调用@PostConstruct
会导致
java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context
以及其他一系列例外情况。有没有办法正确地做到这一点?
答案 0 :(得分:0)
您可以使用Sytem退出静态方法,它终止当前正在运行的Java虚拟机。 传递的代码指示终止状态。按照惯例,非零状态代码表示异常终止。
exp:
@PostConstruct
public void init() {
try {
File initialFile = new File(quartzPropertiesFile);
InputStream targetStream = new FileInputStream(initialFile);
} catch(Exception e) {
LOGGER.error("Error while loading properties file {}", e, quartzPropertiesFile);
System.exit(0);
}
}
答案 1 :(得分:0)
您不能在System.exit(0)
中使用@PostConstruct
,关机将等待startupShutdownMonitor
的锁,无法退出。