Question

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

Était-ce utile?

La solution

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?

Autres conseils

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top