我有一天運行4次的Spring批處理作業。一旦作業開始,它會檢查以前作業的狀態。如果之前的作業狀態是「開始」,則作業會中止。我有一個查詢來檢查。問題是,如果一個作業未能檢查以前的作業狀態,則其狀態將「失敗」,並且下一個作業將開始處理,因此兩個實例將並行運行。所以我們必須手動停止一個。這迫使我們持續監控工作。所以,我也嘗試通過更改查詢來檢查以前的5個作業運行。沒事兒。但有沒有其他方式使用JVM或其他技術,我們可以達到這個標準?我們可以使用JVM變量來動態地保存作業的狀態
請建議..!
我有一天運行4次的Spring批處理作業。一旦作業開始,它會檢查以前作業的狀態。如果之前的作業狀態是「開始」,則作業會中止。我有一個查詢來檢查。問題是,如果一個作業未能檢查以前的作業狀態,則其狀態將「失敗」,並且下一個作業將開始處理,因此兩個實例將並行運行。所以我們必須手動停止一個。這迫使我們持續監控工作。所以,我也嘗試通過更改查詢來檢查以前的5個作業運行。沒事兒。但有沒有其他方式使用JVM或其他技術,我們可以達到這個標準?我們可以使用JVM變量來動態地保存作業的狀態
請建議..!
只是一個想法,但它是有意義的使用時間戳作爲狀態?
另一種可能性將是使你的
如果一個作業失敗檢查以前的工作狀態,其狀態將是「失敗」
檢查更加穩健。差距在哪裏可能會失敗?可能你想使用一些鎖定機制(文件鎖定,數據庫鎖定,互斥鎖)。
如果沒有2個作業可以同時運行,那可能是因爲有一個要保護的資源。鎖定機構最適合這一點。閱讀Java Concurrency In Practice瞭解更多信息。如果你沒有快速訪問這本優秀的書,你可以開始http://docs.oracle.com/javase/tutorial/essential/concurrency/
也許一些簡單的鎖定機制? – vikingsteve
我不確定您是否可以在Spring批處理中使用Quartz調度程序...如果可以的話,Quartz具有StatefulJobs,它可以防止同時運行多個作業實例。 – samlewis