对于最新的稳定版本,请使用 Spring Boot 3.5.5spring-doc.cadn.net.cn

批量应用

当人们在 Spring Boot 应用程序中使用 Spring Batch 时,经常会出现许多问题。 本节将解决这些问题。spring-doc.cadn.net.cn

指定批处理数据源

默认情况下,批处理应用程序需要DataSource以存储作业详细信息。 Spring Batch 需要单个DataSource默认情况下。 要让它使用DataSource除了应用程序的主要内容DataSource,声明一个DataSourcebean,注释其@Bean方法@BatchDataSource. 如果您这样做并想要两个数据源(例如,通过保留主自动配置DataSource),将defaultCandidate属性的@Bean注释到false. 要获得更好的控制权,请添加@EnableBatchProcessing给你的一个@Configuration类或扩展DefaultBatchConfiguration. 请参阅@EnableBatchProcessingDefaultBatchConfiguration了解更多详情。spring-doc.cadn.net.cn

有关 Spring Batch 的更多信息,请参阅 Spring Batch 项目页面spring-doc.cadn.net.cn

指定批处理事务管理器

指定批处理数据源类似,您可以定义PlatformTransactionManager通过注释其@Bean方法@BatchTransactionManager. 如果您这样做并想要两个事务管理器(例如,通过保留自动配置的PlatformTransactionManager),将defaultCandidate属性的@Bean注释到false.spring-doc.cadn.net.cn

指定批处理任务执行器

指定批处理数据源类似,您可以定义TaskExecutor通过注释其@Bean方法@BatchTaskExecutor. 如果您这样做并想要两个任务执行器(例如,通过保留自动配置的TaskExecutor),将defaultCandidate属性的@Bean注释到false.spring-doc.cadn.net.cn

在启动时运行 Spring 批处理作业

Spring Batch 自动配置是通过添加spring-boot-starter-batch到应用程序的类路径。spring-doc.cadn.net.cn

如果单个Jobbean 在应用程序上下文中找到,它在启动时执行(参见JobLauncherApplicationRunner了解详情)。 如果多个Jobbean 时,必须使用spring.batch.job.name.spring-doc.cadn.net.cn

禁用运行Job在应用程序上下文中找到,将spring.batch.job.enabledfalse.spring-doc.cadn.net.cn

从命令行运行

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

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

如果您指定了Environment在命令行上,作业会忽略它。 考虑以下命令:spring-doc.cadn.net.cn

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

这仅为批处理作业提供一个参数:someParameter=someValue.spring-doc.cadn.net.cn

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

重启失败的Job,则必须在命令行上重新指定所有参数(标识和非标识)。 非标识参数不会从上一个执行中复制。 这允许修改或删除它们。spring-doc.cadn.net.cn

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

存储作业存储库

Spring Batch 需要一个数据存储,用于Job存储 库。 如果您使用 Spring Boot,则必须使用实际的数据库。 请注意,它可以是内存数据库,请参阅配置作业存储库spring-doc.cadn.net.cn