我越来越熟悉 Spring Batch,因为我相信我们的项目需要用它来替换当前的代码库(以使开发更快、更容易测试)。
我们当前的代码库具有以下重要特征:
- 一个代码库 - 但有很多批处理(我们在批处理之间重用代码)
- 目前,我们的代码库中有多个 main() 方法,并且只有不同的 shell 脚本来调用适当的主类。
我希望在 Spring 批处理中解决以下问题:
我已经启动了一个基于 Spring Batch 示例的虚拟实验项目:https://spring.io/guides/gs/batch-processing/
我想在同一个代码库中保留多个批处理进程(作业,我认为,如果我们谈论 Spring Batch)。但是,目前,如果我在代码中添加更多作业,所有这些作业都会被执行。更糟糕的是,我在 SpringBoot 主类中添加了一个应用程序监听器,结果发现,作业在 ApplicationReadyEvent 之前执行 - 这对我来说似乎很糟糕,几乎就像在构造函数中运行业务逻辑一样。
我的问题是:
- 如何选择要运行的作业(基于命令行参数)
- 如何确保作业在 ApplicationReadyEvent 之后启动
提前致谢。
最佳答案
有各种各样的问题。
1. 要禁用在启动时自动启动所有作业,只需配置此 Spring Boot property :
spring.batch.job.enabled=false # Do not execute all Spring Batch jobs in the context on startup.
2. 你会像这样运行作业:
java -Dspring.batch.job.names=prepareTeaJob -jar target/0910-job-parameters-cli-0.0.2-SNAPSHOT.jar sugarAmount="no sugar"
糖量有Job参数。属于此列表的完整示例托管于 my Github Repository here 。顺便说一句,如果您正在学习 Spring Batch,还有更多涉及这些各种 Spring Batch 主题的示例。
3. 不确定您所说的“ApplicationReadyEvent”是什么。据我所知,作业应该在 Spring 上下文完全初始化后执行。
关于java - Spring Batch - 动态作业选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36099661/