此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.4.3! |
批处理应用程序
当人们从 Spring Boot 应用程序中使用 Spring Batch 时,经常会出现许多问题。 本节将解决这些问题。
指定 Batch 数据源
默认情况下,批处理应用程序需要一个DataSource
以存储作业详细信息。
Spring Batch 需要一个DataSource
默认情况下。
要让它使用DataSource
除了应用程序的 mainDataSource
,声明一个DataSource
bean,为其@Bean
method 替换为@BatchDataSource
.
如果您这样做并且需要两个数据源(例如,通过保留主自动配置的DataSource
),将defaultCandidate
属性的@Bean
annotation 添加到false
.
要获得更大的控制权,请添加@EnableBatchProcessing
到你的@Configuration
类或 extendDefaultBatchConfiguration
.
请参阅 API 文档@EnableBatchProcessing
和DefaultBatchConfiguration
了解更多详情。
有关 Spring Batch 的更多信息,请参阅 Spring Batch 项目页面。
指定 Batch Transaction Manager
与指定批处理数据源类似,您可以定义PlatformTransactionManager
用于批处理,方法是注释其@Bean
method 替换为@BatchTransactionManager
.
如果您这样做并且想要两个事务管理器(例如,通过保留自动配置的PlatformTransactionManager
),将defaultCandidate
属性的@Bean
annotation 添加到false
.
指定 Batch Task Executor
与指定批处理数据源类似,您可以定义TaskExecutor
用于批处理,方法是注释其@Bean
method 替换为@BatchTaskExecutor
.
如果您这样做并希望使用两个任务执行程序(例如,通过保留自动配置的TaskExecutor
),将defaultCandidate
属性的@Bean
annotation 添加到false
.
在启动时运行 Spring Batch 作业
Spring Batch 自动配置是通过添加spring-boot-starter-batch
添加到应用程序的 Classpath 中。
如果单个Job
bean 在应用程序上下文中,它在启动时执行(参见JobLauncherApplicationRunner
了解详情)。
如果多个Job
bean 中,必须使用spring.batch.job.name
.
要禁用运行Job
在应用程序上下文中,将spring.batch.job.enabled
自false
.
看BatchAutoConfiguration
了解更多详情。
从命令行运行
Spring Boot 将任何以 开头的命令行参数转换为要添加到--
Environment
,请参阅访问命令行属性。
这不应用于将参数传递给批处理作业。
要在命令行上指定批处理参数,请使用常规格式(即 without ),如以下示例所示:--
$ java -jar myapp.jar someParameter=someValue anotherParameter=anotherValue
如果指定Environment
在命令行中,作业将忽略它。
请考虑以下命令:
$ java -jar myapp.jar --server.port=7070 someParameter=someValue
这仅向批处理作业提供一个参数:someParameter=someValue
.
重新启动已停止或失败的作业
重新启动失败的Job
,则必须在命令行上重新指定所有参数(标识和非标识)。
非标识参数不会从上一次执行中复制。
这允许修改或删除它们。
当您使用自定义JobParametersIncrementer ,您必须收集 Incrementer 管理的所有参数才能重新启动失败的执行。 |
存储 Job Repository
Spring Batch 需要一个数据存储Job
存储 库。
如果使用 Spring Boot,则必须使用实际的数据库。
请注意,它可以是内存数据库,请参阅配置 Job Repository。