Spring Batch - 如何执行特定步骤

时间:2014-04-10 22:00:09

标签: spring spring-batch

我开发了一个带有10步的Spring Batch。 我该如何执行特定的步骤?

我的愿望是在JobParameter中传递要执行的步骤。 只能执行JobParameter中指定的步骤。

我搜索过使用决策者,但我并不满意。 有一个更好的解决方案吗?

有什么想法吗?

非常感谢。

亲切

3 个答案:

答案 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内的开始/唯一步骤,并执行该作业。