批处理

本节详细介绍了 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 作业的情况下,无论批处理作业执行如何完成,当使用默认的批处理/启动行为时,任务的结果总是零。请记住,任务是一个启动应用程序,任务返回的退出代码与启动应用程序的退出代码相同。要覆盖此行为,并允许任务在批处理作业返回 BatchStatusFAILED 时返回非零退出代码,请将 spring.cloud.task.batch.fail-on-job-failure 设置为 true。然后退出代码可以是 1(默认值)或基于指定的 ExitCodeGenerator

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

© . This site is unofficial and not affiliated with VMware.