我开发了一个带有10步的Spring Batch。 我该如何执行特定的步骤?
我的愿望是在JobParameter中传递要执行的步骤。 只能执行JobParameter中指定的步骤。
我搜索过使用决策者,但我并不满意。 有一个更好的解决方案吗?
有什么想法吗?
非常感谢。
亲切
答案 0 :(得分:3)
决策者是您正在谈论的处理类型的正确选项。我会对你选择“不满意”的原因感兴趣吗?
答案 1 :(得分:1)
是的,您可以使用JobLauncherTestUtils#launchStep测试单个步骤。
请查看10.3. Testing Individual Steps
部分在此处查找示例代码Spring Batch unit test example
答案 2 :(得分:0)
我有类似的用例。我想传递作业名称和步骤名称,因为输入内容是希望仅执行作业中的特定步骤。
我创建了一个Rest API,该API接受作业名称和步骤名称作为URL参数。 以下是Rest API内的代码。它需要将很少的对象注入到类中。
jobRegistry-MapJobRegistry的实例
jobRepository-jobRepository的实例
jobLauncher-JobLauncher的实例
Job job = null;
Step step = null;
try{
Job job = jobRegistry.getJob(jobName);
if(job instanceof StepLocator){
Step = ((StepLocator)job).getStep(stepName);
}
}catch(NoSuchJobException ex){
throw new Exception("Invalid Job", ex);
}catch(NoSuchStepException ex){
throw new Exception("Invalid Step", ex);
}
if(null == step){
throw new Exception("invalid step");
}
JobBuilderFactory jobBuilder = new JobBuiderFactory(jobRepository);
Job newJob = jobBuilder.get("specific-step-job")
.start(step)
.build();
jobLauncher.run(newJob, jobParameters); //jobParameters relevant for this job
这将动态创建一个名称为“ specific-step-job”的新作业,并将特定步骤实例添加为新Job内的开始/唯一步骤,并执行该作业。