批處理
本節詳細介紹了 Spring Cloud Task 與 Spring Batch 的整合。它追蹤作業執行與執行該作業的任務之間的關聯。
將作業執行與執行該作業的任務關聯起來
Spring Boot 提供了在 Spring Boot Uber-jar 中執行批處理作業的功能。Spring Boot 對此功能的支援使開發人員可以在該執行中執行多個批處理作業。Spring Cloud Task 提供了將作業的執行(作業執行)與任務的執行關聯起來的能力,以便可以相互追溯。
Spring Cloud Task 透過使用 TaskBatchExecutionListener 來實現此功能。預設情況下,此監聽器會在任何同時配置了 Spring Batch 作業(透過在上下文中定義了一個 Job 型別的 bean)和類路徑上存在 spring-cloud-task-batch jar 的上下文中自動配置。該監聽器會被注入到所有符合這些條件的作業中。
覆蓋 TaskBatchExecutionListener
為了防止監聽器被注入到當前上下文中的任何批處理作業中,您可以使用標準的 Spring Boot 機制停用自動配置。
要僅將監聽器注入到上下文中的特定作業中,請覆蓋 batchTaskExecutionListenerBeanPostProcessor 並提供作業 bean ID 列表,如下例所示
public static TaskBatchExecutionListenerBeanPostProcessor batchTaskExecutionListenerBeanPostProcessor() {
TaskBatchExecutionListenerBeanPostProcessor postProcessor =
new TaskBatchExecutionListenerBeanPostProcessor();
postProcessor.setJobNames(Arrays.asList(new String[] {"job1", "job2"}));
return postProcessor;
}
| 您可以在 Spring Cloud Task 專案的 samples 模組中找到一個示例批處理應用程式,此處。 |
批處理資訊訊息
Spring Cloud Task 提供了批處理作業發出資訊訊息的能力。“Spring Batch Events” 部分詳細介紹了此功能。
批處理作業退出程式碼
如之前所討論的,Spring Cloud Task 應用程式支援記錄任務執行的退出程式碼。然而,在任務中執行 Spring Batch 作業的情況下,無論批處理作業執行如何完成,當使用預設的批處理/啟動行為時,任務的結果總是零。請記住,任務是一個啟動應用程式,任務返回的退出程式碼與啟動應用程式的退出程式碼相同。要覆蓋此行為,並允許任務在批處理作業返回 BatchStatus 為 FAILED 時返回非零退出程式碼,請將 spring.cloud.task.batch.fail-on-job-failure 設定為 true。然後退出程式碼可以是 1(預設值)或基於指定的 ExitCodeGenerator)
此功能使用了一個新的 ApplicationRunner,它取代了 Spring Boot 提供的那個。預設情況下,它配置為相同的順序。但是,如果您想自定義 ApplicationRunner 執行的順序,可以透過設定 spring.cloud.task.batch.applicationRunnerOrder 屬性來設定其順序。要使任務根據批處理作業執行的結果返回退出程式碼,您需要編寫自己的 CommandLineRunner。