所以我在Tomcat上运行了一个Spring应用程序。在部署初始化时,我有时会遇到一些错误(即找不到某些JDNI值或者应用程序无法连接到某些服务)。所以当发生这种情况时,我抛出异常并在@Configuration文件中捕获它。在catch块中,我尝试使用System.exit(-1)关闭应用程序。但它似乎不是正确的方法。因为Intellij没有能力或关闭服务器,我甚至看到资源在服务器关闭之前不会被释放。
我也尝试过:
@Autowired
public ApplicationContext application context
@Bean
public IServerDataCache serverDataCache() {
try {
return new ServerDataCache(args);
} catch(InitializationError initializationError) {
log.error("Unable to load configuration for Server Data Cache. Closing application.");
System.exit(1); OR SpringApplication.exit(applicationContext)
}
return null;
}
System.exit(1);或者SpringApplication.exit(applicationContext)似乎具有相同的效果。任何更好的方法来强制执行应用程序最终确定。
BTW它是一个春季启动应用程序。
答案 0 :(得分:1)
让你的@Bean
方法抛出异常。它将被容器捕获,然后它会处理整理过程。
答案 1 :(得分:1)
虽然Andy Wilkinson的回答是正确的,但我想补充一点,因为您在Tomcat上运行应用程序(而不是嵌入式 Tomcat) ,当应用程序无法启动时,Tomcat服务器不会关闭。 这是因为设计,因为Tomcat像所有JavaEE容器一样,意味着一次运行多个应用程序。
如果您希望在应用程序失败时停止整个过程,则需要切换到使用嵌入式容器。