我有一个 Spring Batch 应用程序,我从CommandLineJobRunner. 但现在我必须将此应用程序嵌入到我们的企业环境中。我们有一个自己的 Launcher 应用程序,我必须使用它。对于这个启动器应用程序,我需要一个带有 main 方法的启动类,该方法将在启动时调用,并且我必须在其中启动 Spring Batch。
是手动分配JobLauncher并使用此启动器运行作业的唯一方法,还是 Spring Batch 中有一个支持该功能的类(或者有人知道示例)?
我有一个 Spring Batch 应用程序,我从CommandLineJobRunner. 但现在我必须将此应用程序嵌入到我们的企业环境中。我们有一个自己的 Launcher 应用程序,我必须使用它。对于这个启动器应用程序,我需要一个带有 main 方法的启动类,该方法将在启动时调用,并且我必须在其中启动 Spring Batch。
是手动分配JobLauncher并使用此启动器运行作业的唯一方法,还是 Spring Batch 中有一个支持该功能的类(或者有人知道示例)?
如果您不想使用 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();
}
是的,您可以以编程方式启动您的工作。如果您在 的源代码中看到CommandLineJobRunner,主要方法只是创建一个 Spring 上下文并使用启动器来运行作业。因此,您可以在新应用程序中执行此操作。
JobLauncher 可用于以编程方式调用 Job。如果您正在寻找一种从 web 应用程序触发作业的方法,则 JobLauncher 可以在您的 Servlet/Controller 中自动装配:
http://docs.spring.io/spring-batch/reference/htmlsingle/#runningJobsFromWebContainer