1
我有一個Spring Web應用程序。當應用程序上下文開始時,我使用ApplicationListener<ContextRefreshedEvent>
來執行一些應用程序初始化,特別是我從Web服務加載數據。如果這個Web服務無法訪問,那麼我的應用程序就無法做任何有用的事情,並且保持它的運行是沒有意義的。有沒有辦法以編程方式關閉應用程序上下文?Spring Web應用程序:初始化失敗時關機
我試圖做到以下幾點:
if (contextRefreshedEvent instanceof ConfigurableApplicationContext)
{
ConfigurableApplicationContext configurableApplicationContext
= (ConfigurableApplicationContext) contextRefreshedEvent;
configurableApplicationContext.close();
}
但而不是正常關閉,產生了以下異常:
java.lang.IllegalStateException:Bean工廠未初始化或已關閉 - 稱之爲「刷新'在通過ApplicationContext訪問bean之前
那麼在這種情況下關閉應用程序的正確方法是什麼?
你可以設置一些預定的操作來檢查服務是否啓動,並等待它。但在啓動時關閉異常應用程序是可以的。或者,你可以只是捕獲異常並運行system.exit(0)並記錄日誌原因,如果它列在某些異常列表中或異常排除異常中 – Sarief
調用'System.exit'是一個非常糟糕的主意,就好像yu不幸也可能殺死你的服務器,這幾乎不是你想要的。只需拋出一個基本上阻止應用程序啓動的異常。 –
我知道使用'System.exit'的選項,但是我同意@ M.Deinum說這不是一個好主意。有沒有乾淨的方法來避免拋出異常? – lanoxx