2015-09-11 52 views
0

我正在尋找一種最佳方法來確定春季批量作業是否已完成,而不涉及使用作業監聽器。我正在使用符合jsr的組件。沒有作業偵聽器的原因是我不想依賴最終用戶正確定義他們的作業來包含偵聽器。春季批量檢查作業完成的最佳方法

唯一的辦法我都拿出了迄今爲止是把這個在被調用start類/重啓

 executionID = jobOperator.start(jobName, properties); 

     BatchStatus status = jobOperator.getJobExecution(executionID).getBatchStatus(); 
     while(status != BatchStatus.ABANDONED && status != BatchStatus.COMPLETED && status != BatchStatus.FAILED && 
       status != BatchStatus.STOPPED){ 
      Thread.sleep(1000); 
      status = jobOperator.getJobExecution(executionID).getBatchStatus(); 
     } 

我這裏的問題是這樣的查詢數據庫,並在相當長的運行的作業,這可以查詢數千次獲得狀態的數據庫。看來應該有更好的方法。有些內存中的操作符或其他對象會將當前狀態的作業不必去db。或者可能是一種無需在作業規範中定義回調的回調方法。

回答

0

如何將您的作業監聽器添加到父作業XML並從所有作業XML繼承它?像這個例子的早期部分:https://blog.codecentric.de/en/2013/06/spring-batch-2-2-javaconfig-part-4-job-inheritance/

把作業監聽程序放到所有作業中XML似乎很容易被忽略,但我認爲設置父作業XML更好且易於維護。

+0

我試過這個,但它似乎不適用於符合JSR的啓動器等。我猜這個功能只適用於純彈簧批次?如果它確實有效,這將是一個好主意。 –

+0

我重複檢查了JsrJobParser類,它不支持只有JobParser所做的那個屬性。 –