我有一个Spring Batch应用程序,我从CommandLineJobRunner
开始。但现在我必须将此应用程序嵌入到我们的企业环境中。我们有一个自己的Launcher应用程序,我必须使用它。对于这个启动器应用程序,我需要一个带有main方法的启动类,它将在启动时调用,并且我必须启动Spring Batch。
是手动分配JobLauncher
并使用此启动器运行作业的唯一方法,还是Spring Batch中有一个类支持(或者有人知道样本)?
答案 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