|
这个版本仍在开发中,尚未考虑稳定。请使用最新的稳定版本:spring-cloud-task 5.0.1! |
批处理
本部分更详细地介绍了 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 的上下文中自动配置。该监听器会被注入到所有符合条件的作业中。
覆盖任务批处理执行监听器
为了防止侦听器被注入到当前上下文内的任何批处理作业中,您可以使用标准的 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 提供了批处理作业发送信息性消息的能力。 The “Spring Batch 事件”部分对此功能有详细说明。
批处理作业退出代码
正如之前讨论的,Spring Cloud Task应用程序支持记录任务执行的退出码。然而,在运行嵌入的Spring Batch作业时,无论Batch作业执行如何完成,当使用默认的Batch/Boot行为时,任务的结果总是零。请记住,任务就是一个boot应用程序,其返回的退出码与boot应用程序相同。
要覆盖这种行为,允许任务在Batch作业返回
BatchStatus
为 FAILED 时返回除零以外的退出码,将 spring.cloud.task.batch.fail-on-job-failure 设置为 true。然后退出码可以是1(默认)或基于
指定的
ExitCodeGenerator
)
此功能使用一个新的ApplicationRunner,它替代了由Spring Boot提供的那个。默认情况下,它配置为相同的顺序。但是,如果你想自定义ApplicationRunner的运行顺序,可以通过设置spring.cloud.task.batch.applicationRunnerOrder属性来设置。要使你的任务根据批处理作业执行结果返回退出代码,你需要编写自己的CommandLineRunner。