以编程方式运行Spring Batch Job?

dun*_*nni 15 java spring-batch

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

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

Vin*_*ers 12

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


小智 12

如果您不想使用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();
}
Run Code Online (Sandbox Code Playgroud)


Sat*_*ish 5

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

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