当人们从Spring Boot应用程序中使用Spring Batch时,经常会出现许多问题。本节解决这些问题。

12.1. 指定批处理数据源

默认情况下,批处理应用程序需要一个DataSource来存储作业详细信息。Spring BatchDataSource默认情况下需要一个。要使用它而DataSource不是应用程序的main DataSource,声明一个DataSourcebean,并用注释其@Bean方法@BatchDataSource。如果这样做并需要两个数据源,请记住标记另一个@Primary。要获得更大的控制权,请实施BatchConfigurer。有关更多详细信息,请参见Javadoc@EnableBatchProcessing
有关Spring Batch的更多信息,请参见Spring Batch项目页面

12.2. 在启动时运行Spring Batch作业

通过添加@EnableBatchProcessing到您的@Configuration类之一来启用Spring Batch自动配置。
默认情况下,它在启动时在应用程序上下文中执行所有操作 JobsJobLauncherApplicationRunner有关详细信息,请参见)。您可以通过指定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,则必须使用实际的数据库。请注意,它可以是内存数据库,请参阅“配置作业存储库”