Spring Batch中job的啟動,停止,放棄操作


1,啟動一個job

  運行一個批處理任務至少有兩點要求:一個 JobLauncher 和一個用來運行的 job 。它們都包含了相同或是不同的 context 。舉例來說,從命令行來啟動job,會為每一個job初始化一個JVM,因此每個job會有一個自己的 JobLauncher;從web容器的HttpRequest來啟動job,一般只是用一個 JobLauncher 來異步啟動job,http請求會調用這個 JobLauncher 來啟動它們需要的job。通過web啟動job的例子:

@Controller
public class JobLauncherController {
    @Autowired
    JobLauncher jobLauncher;
    @Autowired
    Job job;
    @RequestMapping("/jobLauncher.html")
    public void handle() throws Exception{
      jobLauncher.run(job, new JobParameters());
    }
}

 

2,停止一個job

  關閉不是立即發生的,因為沒有辦法將一個任務立刻強制停掉,尤其是當任務進行到開發人員自己的代碼段時,框架在此刻是無能為力的,比如某個業務邏輯處理。而一旦控制權還給了框架,它會立刻設置當前 StepExecution 為 BachStatus.STOPPED ,意為停止,然后保存,最后在完成前對JobExecution進行相同的操作。

Set<Long> executions = jobOperator.getRunningExecutions("sampleJob");
jobOperator.stop(executions.iterator().next());

或者在配置文件中實現:

它能夠讓job進行短暫的停留,以便操作員有時間進行其他的操作,stop元素必須配置restart屬性,當該job重新啟動的時候,需要手動觸發,執行step2。

<step id="step1" parent="s1">
    <stop on="COMPLETED" restart="step2"/>
</step>

<step id="step2" parent="s2"/>

 

3,放棄一個job

  一個job的執行過程當執行到FAILED狀態之后,如果它是可重啟的,它將會被重啟。如果任務的執行過程狀態是ABANDONED,那么框架就不會重啟它。ABANDONED狀態也適用於執行步驟,使得它們可以被跳過,即便是在一個可重啟的任務執行之中:如果任務執行過程中碰到在上一次執行失敗后標記為ABANDONED的步驟,將會跳過該步驟直接到下一步(這是由任務流定義和執行步驟的退出碼決定的)。如果當前的系統進程死掉了(“kill -9”或系統錯誤),job自然也不會運行,但JobRepository是無法偵測到這個錯誤的,因為進程死掉之前沒有對它進行任何通知。你必須手動的告訴它,你知道任務已經失敗了還是說考慮放棄這個任務(設置它的狀態為FAILED或ABANDONED)-這是業務邏輯層的事情,無法做到自動決策。只有在不可重啟的任務中才需要設置為FAILED狀態,或者你知道重啟后數據還是有效的。Spring Batch Admin中有一系列工具JobService,用以取消正在進行執行的任務。
 
4,失敗一個job
失敗的job是可以重新啟動的,因為它的狀態是FAILED,如果step2失敗,則返回一個EARLY TERMINATION的返回碼,step3也就不會執行。否則繼續執行step3
<step id="step1" parent="s1" next="step2">

<step id="step2" parent="s2">
    <fail on="FAILED" exit-code="EARLY TERMINATION"/>
    <next on="*" to="step3"/>
</step>

<step id="step3" parent="s3">

5,結束一個job

已經結束的job是不能重新啟動的,因為它的狀態是COMPLETED。如果step2失敗了,則step3就不執行了,該job也就COMPLETED,結束了。如果step2成功了,則繼續往下執行step3。

<step id="step1" parent="s1" next="step2">

<step id="step2" parent="s2">
    <end on="FAILED"/>
    <next on="*" to="step3"/>
</step>

<step id="step3" parent="s3">

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM