2013-06-18 32 views
0

我有一天運行4次的Spring批處理作業。一旦作業開始,它會檢查以前作業的狀態。如果之前的作業狀態是「開始」,則作業會中止。我有一個查詢來檢查。問題是,如果一個作業未能檢查以前的作業狀態,則其狀態將「失敗」,並且下一個作業將開始處理,因此兩個實例將並行運行。所以我們必須手動停止一個。這迫使我們持續監控工作。所以,我也嘗試通過更改查詢來檢查以前的5個作業運行。沒事兒。但有沒有其他方式使用JVM或其他技術,我們可以達到這個標準?我們可以使用JVM變量來動態地保存作業的狀態

請建議..!

+1

也許一些簡單的鎖定機制? – vikingsteve

+0

我不確定您是否可以在Spring批處理中使用Quartz調度程序...如果可以的話,Quartz具有StatefulJobs,它可以防止同時運行多個作業實例。 – samlewis

回答

0

只是一個想法,但它是有意義的使用時間戳作爲狀態?

另一種可能性將是使你的

如果一個作業失敗檢查以前的工作狀態,其狀態將是「失敗」

檢查更加穩健。差距在哪裏可能會失敗?可能你想使用一些鎖定機制(文件鎖定,數據庫鎖定,互斥鎖)。

0

一個選項將使用FileLock來控制,以防止您的應用程序/ jvm的多個實例同時操作。

使用一些文件來表示「作業」的狀態。嘗試在作業開始後在此文件上獲取鎖定。將作業的狀態寫入此文件並在完成後釋放鎖定。如果作業無法獲得文件上的鎖定 - 還有另一個作業正在運行 - 執行與您的案例相關的任何操作(例如,靜默地失敗或者終止上一個作業)。

這是解決UNIX世界中類似問題的常用方法。

更新:here是一個簡單的例子,展示瞭如何使用FileLock。

相關問題