[英]Shutting down spring batch jobs gracefully in tomcat
我們在提供UI的同一Web應用程序中的tomcat中運行多個spring批處理作業。 最近,我們增加了更多的工作,並且我們注意到在對應用程序進行修補時,一些工作可能會陷入“開始”或“開始”狀態。 這些作業中的許多作業確保啟動前另一個作業未運行,因此這意味着在修補服務器后,某些作業將被破壞,直到我們手動運行SQL將作業的狀態更新為ABANDONED或STOPPED為止。
我在這里已經讀到,JobScope和StepScope作業在關閉時效果不佳。
該文章建議不要使用JobScope或StepScope,但我不禁要認為這是一個已解決的問題,在該問題中,人們必須在應用程序退出時采取某些措施以防止出現此問題。
是否有一些最佳實踐來處理這種情況? 您在應用程序中做什么?
我們正在使用3.0.3版本的spring-batch。
我將為您提供有關如何解決這種情況的想法 。 不一定是批量解決方案。
每當我需要在應用程序中添加作業時,我都會這樣做:
JobController
類來管理所有作業 R
運行, F
, Q
隊列定義(您可以根據需要添加更多內容,如中止,取消等)(這些作業控制這些狀態) JobController
添加一個布爾屬性,以在實例化時通知您是否已經檢查了作業。 將其設置為false R
狀態的每個作業更新為Q
並增加其優先級,以便在重新啟動服務器后首先執行該作業。 將該檢查設置為true后,該檢查位於該布爾屬性的if
中。 這樣,每次您第一次調用JobController時,由於服務器崩潰而有未完成的作業,您便可以將所有參數設置為可以再次執行的狀態。 由於您將檢查該boolean屬性,因此該檢查僅會發生一次。
您應該注意的一件事是謹慎處理工作優先級,如果處理不當,可能會遇到飢餓問題。
您可以輕松地將此解決方案改編為春季批處理。
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.