|
此版本仍在开发中,尚未被视为稳定版本。如需最新稳定版本,请使用 Spring Boot 4.0.4! |
批处理应用程序
当人们在Spring Boot应用程序中使用Spring Batch时,经常会遇到一些问题。 本节将解答这些问题。
指定批处理数据源
默认情况下,批处理应用程序需要 DataSource 来存储作业详情。
Spring Batch 默认期望使用单个 DataSource。
若要使其使用不同于应用程序主 DataSource 的 DataSource,请声明一个 DataSource Bean,并使用 @BatchDataSource 注解其 @Bean 方法。
如果执行此操作并希望使用两个数据源(例如,通过保留主要的自动配置的 DataSource),请将 @Bean 注解的 defaultCandidate 属性设置为 false。
要禁用 Spring Boot 的自动配置并完全控制 Spring Batch 的配置,请将 @EnableBatchProcessing 添加到您的某个 @Configuration 类中,或扩展 DefaultBatchConfiguration。
这也将禁用 Spring Boot 对初始化 Spring Batch 数据库架构的支持。
要了解更多关于手动配置 Spring Batch 的信息,请参阅 @EnableBatchProcessing
和 DefaultBatchConfiguration 的 API 文档。
有关 Spring Batch 的更多信息,请参阅 Spring Batch 项目页面。
指定批处理事务管理器
类似于指定批处理数据源,您可以通过将PlatformTransactionManager的@Bean方法标注为@BatchTransactionManager,来定义一个用于批处理的PlatformTransactionManager。
如果您这样做,并且想要两个事务管理器(例如保留自动配置的PlatformTransactionManager),请将@Bean注解的defaultCandidate属性设置为false。
指定批处理任务执行器
类似于指定批处理数据源,您可以通过将TaskExecutor的@Bean方法标注为@BatchTaskExecutor,来定义一个用于批处理的TaskExecutor。
如果您这样做,并且想要两个任务执行器(例如保留自动配置的TaskExecutor),请将@Bean注解的defaultCandidate属性设置为false。
在启动时运行 Spring Batch 作业
通过将 spring-boot-starter-batch 添加到应用程序的类路径中,可以启用 Spring Batch 自动配置。
如果在应用上下文中找到单个 Job bean,它将在启动时执行(详见 JobLauncherApplicationRunner)。
如果找到多个 Job bean,则必须使用 spring.batch.job.name 指定要执行的作业。
要禁用运行在应用程序上下文中找到的 Job,请将 spring.batch.job.enabled 设置为 false。
有关更多详细信息,请参阅 BatchAutoConfiguration。
从命令行运行
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 时,必须收集由增量器管理的所有参数,以重新启动失败的执行。 |