批处理应用程序
当人们在 Spring Boot 应用程序中使用 Spring Batch 时,经常会出现一些问题。本节将解决这些问题。
指定批处理数据源
默认情况下,批处理应用程序需要一个 DataSource 来存储作业详细信息。Spring Batch 默认只期望一个 DataSource。要让它使用应用程序主 DataSource 之外的 DataSource,请声明一个 DataSource Bean,并用 @BatchDataSource 注解其 @Bean 方法。如果这样做并且想要两个数据源(例如,通过保留自动配置的主 DataSource),请将 @Bean 注解的 defaultCandidate 属性设置为 false。要进行更精细的控制,请将 @EnableBatchProcessing 添加到您的一个 @Configuration 类中,或者扩展 DefaultBatchConfiguration。有关更多详细信息,请参阅 @EnableBatchProcessing 和 DefaultBatchConfiguration 的 API 文档。
有关 Spring Batch 的更多信息,请参阅 Spring Batch 项目页面。
指定批处理事务管理器
与指定批处理数据源类似,您可以通过使用 @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 时,您必须收集所有由增量器管理的参数才能重新启动失败的执行。 |