以编程方式运行Spring Batch Job?

时间:2011-05-10 14:14:41

标签: java spring-batch

我有一个Spring Batch应用程序,我从CommandLineJobRunner开始。但现在我必须将此应用程序嵌入到我们的企业环境中。我们有一个自己的Launcher应用程序,我必须使用它。对于这个启动器应用程序,我需要一个带有main方法的启动类,它将在启动时调用,并且我必须启动Spring Batch。

是手动分配JobLauncher并使用此启动器运行作业的唯一方法,还是Spring Batch中有一个类支持(或者有人知道样本)?

3 个答案:

答案 0 :(得分:11)

是的,您可以通过编程方式启动作业。如果您看到CommandLineJobRunner的{​​{3}},则main方法只需创建一个Spring上下文并使用启动器来运行该作业。所以你可以在新的应用程序中执行此操作。

答案 1 :(得分:10)

如果您不想使用CommandLineRunner(出于某种原因或需要某些自定义逻辑),请使用Spring Boot应用程序,您可以始终执行以下操作:

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();
}

答案 2 :(得分:5)

JobLauncher可用于以编程方式调用Job。如果您正在寻找一种从Web应用程序触发作业的方法,可以在您的Servlet / Controller中自动装配JobLauncher:

http://docs.spring.io/spring-batch/reference/htmlsingle/#runningJobsFromWebContainer