此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.1Spring中文文档

此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.1Spring中文文档

当人们在 Spring Boot 应用程序中使用 Spring Batch 时,经常会出现许多问题。 本节将解决这些问题。Spring中文文档

指定批处理数据源

默认情况下,批处理应用程序需要 a 来存储作业详细信息。 默认情况下,Spring Batch 需要单个。 要让它使用应用程序的 main 以外的其他 ,请声明一个 bean,并用 来注释它的方法。 如果这样做并且需要两个数据源,请记住标记另一个数据源。 要获得更大的控制权,请添加到其中一个类或扩展 . 有关详细信息,请参阅 @EnableBatchProcessing 的 Javadoc 和 DefaultBatchConfigurationDataSourceDataSourceDataSourceDataSourceDataSource@Bean@BatchDataSource@Primary@EnableBatchProcessing@ConfigurationDefaultBatchConfigurationSpring中文文档

有关 Spring Batch 的详细信息,请参阅 Spring Batch 项目页Spring中文文档

指定批处理事务管理器

指定批处理数据源类似,可以通过将批处理标记为 来定义用于批处理的 。 如果您这样做并且需要两个事务管理器,请记住将另一个标记为 。PlatformTransactionManager@BatchTransactionManager@PrimarySpring中文文档

在启动时运行 Spring Batch 作业

Spring Batch 自动配置是通过添加到应用程序的类路径来启用的。spring-boot-starter-batchSpring中文文档

如果在应用程序上下文中找到单个 Bean,则在启动时执行该 Bean(有关详细信息,请参阅 JobLauncherApplicationRunner)。 如果找到多个 Bean,则必须使用 指定应执行的作业。JobJobspring.batch.job.nameSpring中文文档

若要禁用在应用程序上下文中运行 found,请将 设置为 。Jobspring.batch.job.enabledfalseSpring中文文档

有关详细信息,请参阅 BatchAutoConfigurationSpring中文文档

从命令行运行

Spring Boot 将任何以 开头的命令行参数转换为要添加到的属性,请参阅访问命令行属性。 这不应用于将参数传递给批处理作业。 若要在命令行上指定批处理参数,请使用常规格式(即没有),如以下示例所示:--Environment--Spring中文文档

$ java -jar myapp.jar someParameter=someValue anotherParameter=anotherValue

如果在命令行上指定 的属性,则作业将忽略该属性。 请考虑以下命令:EnvironmentSpring中文文档

$ java -jar myapp.jar --server.port=7070 someParameter=someValue

这仅为批处理作业提供了一个参数:。someParameter=someValueSpring中文文档

重新启动已停止或失败的作业

要重新启动失败的参数,必须在命令行上重新指定所有参数(标识和非标识)。 非标识参数不会从上一次执行中复制。 这允许修改或删除它们。JobSpring中文文档

当您使用自定义 时,您必须收集由增量器管理的所有参数才能重新启动失败的执行。JobParametersIncrementer
当您使用自定义 时,您必须收集由增量器管理的所有参数才能重新启动失败的执行。JobParametersIncrementer

存储作业存储库

Spring Batch 需要存储库的数据存储。 如果使用 Spring Boot,则必须使用实际的数据库。 请注意,它可以是内存中的数据库,请参阅配置作业存储库JobSpring中文文档