2017-06-17 129 views
2

所以我有一個運行在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)似乎具有相同的效果。任何一種更好的方法來執行應用程序的最終確定。

順便說一句,它是一個彈簧引導應用程序。

回答

1

只要讓你的@Bean方法拋出異常。它將被容器捕獲,然後它將處理整理事情。

+0

只是爲了澄清,該建議是這樣的: @Bean 公共IServerDataCache serverDataCache()拋出InitializationError { 返回新ServerDataCache(參數); } – kewne

+0

是的,這就是我的意思 –

1

雖然安迪·威爾金森的答案是正確的,我只是想補充一點,因爲你在Tomcat上運行應用程序(而不是嵌入式的Tomcat),Tomcat服務器關機時應用程序無法啓動。 這是由設計決定的,因爲像所有JavaEE容器一樣,Tomcat意味着一次運行多個應用程序。

如果您希望整個過程在應用程序失敗時停止,您需要切換到使用嵌入容器。