簡體   English   中英

Spring Batch分區,如何在任何分區步驟引發異常后停止作業

[英]Spring Batch Partitioning, how to stop a Job once any of the partitioned step throws exception

我正在運行帶有分區步驟的Spring Batch作業,並且如果其中1個分區失敗或引發異常,我需要立即停止作業,一旦任何分區步驟引發異常,如何停止作業,因為當前其他分區步驟一直運行直到結束並完成后,作業將以失敗的返回代碼停止。

代碼:: stepBuilderFactory.get(“ masterStep”)。allowStartIfComplete(true).partitioner(multithreadedPartitionerStep).partitioner(“ multithreadedPartitionerStep”,extractJobPartitioner).gridSize(gridSize).taskExecutor(taskExecutor).build();

如果我理解正確,那么您希望Spring Batch Job根據您的步驟輸出實現某種行為。

如上文@Jim所述,向我們展示您的分區處理程序。

第一件事-工作就是工作。 它由步驟組成(可以分區)。 如果任一步驟的狀態過時,它也會在Job上反映(以通用術語表示)

同樣,到現在為止,我猜您可能已經遷移到了較新版本的Spring Batch。 幸運的是,在4.x世界中,除了常規流程外,您還有三個選擇。

  1. 一步一步結束
  2. 失步
  3. 在給定步驟停止作業

參考鏈接- 春季指南

然后您告訴Spring Batch在什么步驟執行什么操作。 這是上面鏈接的快速瀏覽:

@Bean
public Job job() {
        return this.jobBuilderFactory.get("job")
                                .start(step1())
                                .next(step2())
                                .on("FAILED").end()
                                .from(step2()).on("*").to(step3())
                                .end()
                                .build();
}

在以下情況下,如果步驟2失敗,則作業以BatchStatus為FAILED / COMPLETE / WHEREVER的狀態停止,而ExitStatus為EARLY TERMINATION的狀態終止,並且步驟3不執行。 否則,執行轉到步驟3。 另外,如果步驟2失敗並且作業重新啟動,則執行將再次從步驟2開始。

@Bean
public Job job() {
        return this.jobBuilderFactory.get("job")
                        .start(step1())
                        .next(step2()).on("FAILED").fail()
                        .from(step2()).on("*").to(step3())
                        .end()
                        .build();
}

在以下情況下,如果步驟1以COMPLETE / FAILED / WHEREVER結尾,則作業將停止。 重新啟動后,將在步驟2開始執行。

@Bean
public Job job() {
        return this.jobBuilderFactory.get("job")
                        .start(step1()).on("COMPLETED").stopAndRestart(step2())
                        .end()
                        .build();
}

分區步驟中,如果在任何csv中找到任何不正確的字段數,則將正確報告該字段。 這里,asynctaskexecutor和threadpooltaskexecutor用於分區步驟。

希望它能有所幫助並以某種方式適合您的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM