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

批处理应用程序

当人们在 Spring Boot 应用程序中使用 Spring Batch 时,经常会遇到一些问题。 本节将解答这些问题。spring-doc.cadn.net.cn

指定批处理数据源

默认情况下,批处理应用程序需要一个 DataSource 来存储作业详情。 Spring Batch 默认期望使用单个 DataSource。 若要使其使用不同于应用程序主 DataSourceDataSource,请声明一个 DataSource Bean,并使用 @BatchDataSource 注解其 @Bean 方法。 如果您这样做了并且想要两个数据源(例如通过保留主自动配置的 DataSource),请将 @Bean 注解的 defaultCandidate 属性设置为 falsespring-doc.cadn.net.cn

要禁用 Spring Boot 的自动配置并完全掌控 Spring Batch 的配置,请在您的某个 @EnableBatchProcessing 类中添加 @Configuration,或扩展 DefaultBatchConfiguration。 这也将禁用 Spring Boot 对初始化 Spring Batch 数据库架构的支持。spring-doc.cadn.net.cn

要了解更多关于手动配置 Spring Batch 的信息,请参阅 @EnableBatchProcessingDefaultBatchConfiguration 的 API 文档。spring-doc.cadn.net.cn

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

指定批处理事务管理器

指定批处理数据源类似,您可以通过使用@BatchTransactionManager注解其@Bean方法,来定义一个用于批处理的PlatformTransactionManager。 如果您这样做并希望使用两个事务管理器(例如,通过保留自动配置的PlatformTransactionManager),请将@Bean注解的defaultCandidate属性设置为falsespring-doc.cadn.net.cn

指定批处理任务执行器

类似于 指定批处理数据源,您可以通过使用 @BatchTaskExecutor 注解其 @Bean 方法,来定义一个用于批处理的 TaskExecutor。 如果您这样做并希望拥有两个任务执行器(例如,通过保留自动配置的 TaskExecutor),请将 @Bean 注解的 defaultCandidate 属性设置为 falsespring-doc.cadn.net.cn

在启动时运行 Spring Batch 作业

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

如果在应用程序上下文中找到单个 Job Bean,它将在启动时执行(详见 JobLauncherApplicationRunner)。 如果找到多个 Job Bean,则必须使用 spring.batch.job.name 指定要执行的作业。spring-doc.cadn.net.cn

要禁用应用程序上下文中发现的 Job 的运行,请将 spring.batch.job.enabled 设置为 falsespring-doc.cadn.net.cn

查看更多详情,请参阅 BatchAutoConfigurationspring-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=someValuespring-doc.cadn.net.cn

重启已停止或失败的作业

要重新启动失败的 Job,必须在命令行上重新指定所有参数(包括标识参数和非标识参数)。 非标识参数不会从之前的执行中复制。 这允许对它们进行修改或移除。spring-doc.cadn.net.cn

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

存储作业仓库

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