|
此版本仍在开发中,尚未视为稳定版。如需最新稳定版本,请使用 Spring Boot 4.0.4! |
批处理应用程序
当人们在 Spring Boot 应用程序中使用 Spring Batch 时,经常会遇到一些问题。 本节将解答这些问题。
指定批处理数据源
将作业详情存储到 SQL 数据库的批处理应用程序需要一个 DataSource Bean。
默认情况下,需要一个单独的 DataSource Bean。
若要使 Spring Batch 使用应用程序主 DataSource 之外的 DataSource,请声明一个 DataSource Bean,并使用 @BatchDataSource 注解其 @Bean 方法。
如果您这样做并希望使用两个数据源(例如通过保留主自动配置的 DataSource),请将 @Bean 注解的 defaultCandidate 属性设置为 false。
指定批处理事务管理器
与指定批处理数据源类似,您可以通过使用@BatchTransactionManager注解其@Bean方法,来定义一个用于批处理的PlatformTransactionManager。
如果您这样做并希望使用两个事务管理器(例如,通过保留自动配置的PlatformTransactionManager),请将@Bean注解的defaultCandidate属性设置为false。
指定批处理任务执行器
类似于 指定批处理数据源,您可以通过使用 @BatchTaskExecutor 注解其 @Bean 方法,来定义一个用于批处理的 TaskExecutor。
如果您这样做并希望拥有两个任务执行器(例如,通过保留自动配置的 TaskExecutor),请将 @Bean 注解的 defaultCandidate 属性设置为 false。
从命令行运行
Spring Boot 会将任何以 -- 开头的命令行参数转换为要添加到 Environment 的属性,请参阅 访问命令行属性。
不应将其用于向批处理作业传递参数。
若要在命令行上指定批处理参数,请使用常规格式(即不带 --),如下例所示:
$ java -jar myapp.jar someParameter=someValue anotherParameter=anotherValue
如果您在命令行上指定了 Environment 的属性,该属性将被作业忽略。
请考虑以下命令:
$ java -jar myapp.jar --server.port=7070 someParameter=someValue
这仅向批处理作业提供一个参数:someParameter=someValue。
重启已停止或失败的作业
要重新启动失败的 Job,必须在命令行上重新指定所有参数(包括标识参数和非标识参数)。
非标识参数不会从之前的执行中复制。
这允许对它们进行修改或移除。
当您使用自定义的 JobParametersIncrementer 时,您必须收集由增量器管理的所有参数,以重新启动失败的执行。 |