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

來源:互聯網
上載者:User

標籤:不同   自動   row   parameter   調用   不可   相同   kill -9   決策   

1,啟動一個job

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

@Controllerpublic 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());

3,放棄一個job

  一個job的執行過程當執行到FAILED狀態之後,如果它是可重啟的,它將會被重啟。如果任務的執行過程狀態是ABANDONED,那麼架構就不會重啟它。ABANDONED狀態也適用於執行步驟,使得它們可以被跳過,即便是在一個可重啟的任務執行之中:如果任務執行過程中碰到在上一次執行失敗後標記為ABANDONED的步驟,將會跳過該步驟直接到下一步(這是由任務流定義和執行步驟的退出碼決定的)。如果當前的系統進程死掉了(“kill -9”或系統錯誤),job自然也不會運行,但JobRepository是無法偵測到這個錯誤的,因為進程死掉之前沒有對它進行任何通知。你必須手動的告訴它,你知道任務已經失敗了還是說考慮放棄這個任務(設定它的狀態為FAILED或ABANDONED)-這是商務邏輯層的事情,無法做到自動決策。只有在不可重啟的任務中才需要設定為FAILED狀態,或者你知道重啟後資料還是有效。Spring Batch Admin中有一系列工具JobService,用以取消進行中執行的任務。

  

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.