Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Run Spring Batch Job programmatically?

I have a Spring Batch application, which I start with the CommandLineJobRunner. But now I have to embed this application into our corporate environment. There we have an own Launcher application which I have to use. For this launcher application I need a startup class with a main method which will be called at startup and where I would have to launch Spring Batch.

Is the only way to manually assign a JobLauncher and run the Job with this launcher or is there a class in Spring Batch which would support that (or do someone know a sample)?

like image 752
dunni Avatar asked May 10 '11 14:05

dunni


People also ask

How do I start a Spring Batch programmatically?

Yes, you can launch your job programmatically. If you see in the source of CommandLineJobRunner , the main method just create a Spring context and use the launcher to run the job. So you can do this in your new application. Show activity on this post.

How do I run a Spring Batch job continuously?

If you want to launch your jobs periodically, you can combine Spring Scheduler and Spring Batch. Here is a concrete example : Spring Scheduler + Batch Example. If you want to re-launch your job continually (Are you sure !), You can configure a Job Listener on your job. Then, through the method jobListener.


1 Answers

Using a Spring Boot Application if you don't want to use the CommandLineRunner (for some reason or if you need some custom logic), you can always do something like :

public static void main(String[] args) {

    SpringApplication app = new SpringApplication(YourApplication.class);
    app.setWebEnvironment(false);
    ConfigurableApplicationContext ctx = app.run(args);

    JobLauncher jobLauncher = ctx.getBean(JobLauncher.class);
    Job job = ctx.getBean("your-job-here", Job.class);
    JobParameters jobParameters = new JobParametersBuilder().toJobParameters();


    JobExecution jobExecution = jobLauncher.run(job, jobParameters);
    BatchStatus batchStatus = jobExecution.getStatus();
}
like image 114
Eric Hudon Avatar answered Sep 24 '22 14:09

Eric Hudon