当人们从Spring Boot应用程序中使用Spring Batch时,经常会出现许多问题。本节解决这些问题。
12.1. 指定批处理数据源
默认情况下,批处理应用程序需要一个DataSource
来存储作业详细信息。Spring BatchDataSource
默认情况下需要一个。要使用它而DataSource
不是应用程序的main DataSource
,声明一个DataSource
bean,并用注释其@Bean
方法@BatchDataSource
。如果这样做并需要两个数据源,请记住标记另一个@Primary
。要获得更大的控制权,请实施BatchConfigurer
。有关更多详细信息,请参见Javadoc@EnableBatchProcessing
。
有关Spring Batch的更多信息,请参见Spring Batch项目页面。
12.2. 在启动时运行Spring Batch作业
通过添加@EnableBatchProcessing
到您的@Configuration
类之一来启用Spring Batch自动配置。
默认情况下,它在启动时在应用程序上下文中执行所有操作 Jobs
(JobLauncherApplicationRunner
有关详细信息,请参见)。您可以通过指定spring.batch.job.names
(使用逗号分隔的作业名称模式列表)缩小到一个或多个特定作业。
有关更多详细信息,请参见BatchAutoConfiguration和@EnableBatchProcessing。
12.3. 从命令行运行
Spring Boot将任何--
以开头的命令行参数转换为要添加到的属性Environment
,请参见访问命令行属性。这不应用于将参数传递给批处理作业。要在命令行上指定批处理参数,请使用常规格式(即,不带--
),如以下示例所示:
$ java -jar myapp.jar someParameter = someValue anotherParameter = anotherValue
如果Environment
在命令行上指定的属性,则作业将忽略它。考虑以下命令:
$ java -jar myapp.jar —server.port = 7070 someParameter = someValue
这仅向批处理作业提供一个参数:someParameter=someValue
。
12.4. 存储作业库
Spring Batch需要用于Job
存储库的数据存储。如果使用Spring Boot,则必须使用实际的数据库。请注意,它可以是内存数据库,请参阅“配置作业存储库”。