此版本仍在开发中,尚未被视为稳定版本。如需最新稳定版本,请使用 Spring Boot 4.0.4!spring-doc.cadn.net.cn

批处理应用程序

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

指定批处理数据源

批量应用程序将作业详细信息存储在SQL数据库中需要一个 DataSource Bean。 默认情况下,需要一个 DataSource Bean。 如果要让Spring Batch使用除应用程序主 DataSource 之外的 DataSource,请声明一个 DataSource Bean,并使用 @Bean 注解其 @BatchDataSource 方法。 如果您这样做并且想要两个数据源(例如保留主自动配置的 DataSource),请将 @Bean 注解的 defaultCandidate 属性设置为 falsespring-doc.cadn.net.cn

指定批处理事务管理器

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

指定批处理任务执行器

类似于指定批处理数据源,您可以通过将TaskExecutor@Bean方法标注为@BatchTaskExecutor,来定义一个用于批处理的TaskExecutor。 如果您这样做,并且想要两个任务执行器(例如保留自动配置的TaskExecutor),请将@Bean注解的defaultCandidate属性设置为falsespring-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 时,必须收集由增量器管理的所有参数,以重新启动失败的执行。