15

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

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

4

3 回答 3

15

如果您不想使用 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();
}
于 2016-05-02T16:28:51.177 回答
12

是的,您可以以编程方式启动您的工作。如果您在 的源代码中看到CommandLineJobRunner,主要方法只是创建一个 Spring 上下文并使用启动器来运行作业。因此,您可以在新应用程序中执行此操作。

于 2011-05-10T14:24:45.150 回答
6

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

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

于 2011-05-25T07:08:52.570 回答