这个版本仍在开发中,尚未考虑稳定。请使用最新的稳定版本:spring-cloud-task 5.0.1spring-doc.cadn.net.cn

批处理

本部分更详细地介绍了 Spring Cloud Task 与 Spring Batch 的集成,跟踪作业执行与其在其中执行的任务之间的关联。spring-doc.cadn.net.cn

关联执行任务与其执行的任务

Spring Boot 提供了在 Spring Boot Uber-jar 中执行批处理作业的设施。 Spring Boot 对此功能的支持让开发者可以在同一执行中运行多个批处理作业。 Spring Cloud Task 提供了将作业的执行(即作业执行)与任务的执行关联起来的能力,从而可以将两者追溯到同一任务。spring-doc.cadn.net.cn

Spring Cloud Task 通过使用 TaskBatchExecutionListener 来实现此功能。 默认情况下, 此监听器会在任何同时具有配置了 Spring Batch 作业(通过在上下文中定义了类型为 Job 的 bean)且在类路径上有 spring-cloud-task-batch jar 的上下文中自动配置。该监听器会被注入到所有符合条件的作业中。spring-doc.cadn.net.cn

覆盖任务批处理执行监听器

为了防止侦听器被注入到当前上下文内的任何批处理作业中,您可以使用标准的 Spring Boot 机制来禁用自动配置。spring-doc.cadn.net.cn

仅在特定作业的上下文中将监听器注入到特定作业中,可重写 batchTaskExecutionListenerBeanPostProcessor 并提供作业bean ID列表,如下例所示:spring-doc.cadn.net.cn

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-doc.cadn.net.cn

批处理作业退出代码

正如之前讨论的,Spring Cloud Task应用程序支持记录任务执行的退出码。然而,在运行嵌入的Spring Batch作业时,无论Batch作业执行如何完成,当使用默认的Batch/Boot行为时,任务的结果总是零。请记住,任务就是一个boot应用程序,其返回的退出码与boot应用程序相同。 要覆盖这种行为,允许任务在Batch作业返回 BatchStatusFAILED 时返回除零以外的退出码,将 spring.cloud.task.batch.fail-on-job-failure 设置为 true。然后退出码可以是1(默认)或基于 指定的 ExitCodeGeneratorspring-doc.cadn.net.cn

此功能使用一个新的ApplicationRunner,它替代了由Spring Boot提供的那个。默认情况下,它配置为相同的顺序。但是,如果你想自定义ApplicationRunner的运行顺序,可以通过设置spring.cloud.task.batch.applicationRunnerOrder属性来设置。要使你的任务根据批处理作业执行结果返回退出代码,你需要编写自己的CommandLineRunnerspring-doc.cadn.net.cn