我有一个 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