[英]Spring batch : Propagate exception encountered in partitioned step (Stop job execution)
[英]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世界中,除了常規流程外,您還有三個選擇。
參考鏈接- 春季指南
然后您告訴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.