我熟悉Spring Batch,因为我相信这是我们的项目需要替换我们当前的代码库(使开发更快更容易测试)。
我们当前的代码库具有以下重要特征:
我希望在Spring批处理中解决以下问题:
我已经开始了一个基于Spring Batch示例的虚拟试验项目:https://spring.io/guides/gs/batch-processing/
我想在同一个代码库中保留多个批处理过程(如果我们谈论Spring Batch,我会采取工作)。但是,目前,如果我添加更多Job sin我的代码,所有这些都会被执行。更糟糕的是,我在SpringBoot主类中添加了一个Application Listener,事实证明,在ApplicationReadyEvent之前执行了Jobs - 这对我来说似乎很糟糕,就像在构造函数中运行业务逻辑一样。
我的问题是:
提前致谢。
答案 0 :(得分:1)
有各种各样的问题。
1。
要在启动时自动禁用所有作业,请配置此following-sibling
:
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参数。属于此商家信息的完整示例托管在Spring Boot property中。顺便说一下,如果您正在学习Spring Batch,还有更多的例子涵盖了这些不同的Spring Batch主题。
3。 不确定你所指的是" ApplicationReadyEvent"。 AFAIK作业应在完全初始化的Spring上下文后执行。
答案 1 :(得分:0)
我的解决方案如下:
将spring.batch.job.enabled属性设置为false - 这会阻止作业在设置上下文时启动
将JobLauncher从上下文中取出并自行运行任何作业:
SpringApplication app = new SpringApplication(BatchProcessingServiceStarter.class);
app.setWebEnvironment(false);
ConfigurableApplicationContext ctx=app.run(args);
JobLauncher jobLauncher = ctx.getBean(JobLauncher.class);
JobParameters jobParameters = new JobParametersBuilder()
.addDate("date", new Date())
.toJobParameters();
if(!"1".equals(args[0])){
jobLauncher.run(ctx.getBean("BatchConfiguration2", Job.class), jobParameters);
} else {
jobLauncher.run(ctx.getBean("BatchConfiguration1", Job.class), jobParameters);
}