質問

I've developed a Spring Batch with 10 Step. How can i execute a specific Step ?

My wish is to passed in JobParameter the Step to execute. Only the Step specified in JobParameter must be executed.

I searched to use the Decider, but i'm not really satisfied. There's a better Solution ?

Any idea ?

Thanks a lot.

cordially

役に立ちましたか?

解決

The Decider is the correct option for the type of processing you're talking about. I'd be interested in why you were "not really satisfied" by that option?

他のヒント

I had similar use case. I wanted to pass job name and step name as the input and expectation was to execute only that particular step from the job.

I created a Rest API which accepts job name and step name as URL parameters. Below is the code inside the Rest API. It requires few objects injected into the class.

jobRegistry - instance of MapJobRegistry

jobRepository - instance of jobRepository

jobLauncher - instance of 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

This will dynamically create a new job with name "specific-step-job" and add the specific step instance as the start/only step inside the new Job and executes this job.

Yes, you can test an individual step using JobLauncherTestUtils#launchStep.

Please have a look at section 10.3. Testing Individual Steps

Find a sample code here Spring Batch unit test example

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top