我有一个Spring Batch应用程序,我从CommandLineJobRunner
开始。但是现在我必须将这个应用程序嵌入到我们的企业环境中。我们有一个我必须使用的自己的启动器应用程序。对于这个启动器应用程序,我需要一个启动类,其中包含一个将在启动时调用的主方法,并且我将不得不启动Spring Batch。以编程方式运行Spring批处理作业?
手动分配JobLauncher
并使用此启动程序运行作业的唯一方法还是Spring支持中有一个支持该类的类(或者有人知道样例)?
我有一个Spring Batch应用程序,我从CommandLineJobRunner
开始。但是现在我必须将这个应用程序嵌入到我们的企业环境中。我们有一个我必须使用的自己的启动器应用程序。对于这个启动器应用程序,我需要一个启动类,其中包含一个将在启动时调用的主方法,并且我将不得不启动Spring Batch。以编程方式运行Spring批处理作业?
手动分配JobLauncher
并使用此启动程序运行作业的唯一方法还是Spring支持中有一个支持该类的类(或者有人知道样例)?
是的,你可以通过程序启动你的工作。如果您看到CommandLineJobRunner
的in the source,则主要方法只是创建一个Spring上下文并使用启动器来运行该作业。所以你可以在你的新应用程序中做到这一点。
JobLauncher可用于以编程方式调用作业。
http://docs.spring.io/spring-batch/reference/htmlsingle/#runningJobsFromWebContainer
使用弹簧引导应用程序,如果你不想使用CommandLineRunner(用于:JobLauncher可以在你的servlet /控制器如果你正在寻找一种方式来从web应用程序触发的作业,自动装配某些原因或如果您需要一些自定义逻辑),您可以随时做类似以下操作:
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();
}
我尝试了这种方法,但不知何故上下文无法找到“你的工作在这里”的bean,尽管事实上我可以看到bean被Spring容器初始化:(任何想法为什么? – Vishal 2017-12-08 15:29:01
链接无法正常工作。 – nilsi 2014-12-19 10:56:06