Java 以编程方式运行Spring批处理作业?
我有一个Spring批处理应用程序,从Java 以编程方式运行Spring批处理作业?,java,spring-batch,Java,Spring Batch,我有一个Spring批处理应用程序,从CommandLineJobRunner开始。但现在我必须将这个应用程序嵌入到我们的公司环境中。我们有一个自己的启动器应用程序,我必须使用它。对于这个启动程序应用程序,我需要一个带有main方法的启动类,该方法将在启动时被调用,并且我必须在其中启动springbatch 是手动分配JobLauncher并使用此启动器运行作业的唯一方法,或者Spring Batch中是否有支持该方法的类(或者有人知道示例)?是的,您可以通过编程方式启动作业。如果您看到的是Co
CommandLineJobRunner
开始。但现在我必须将这个应用程序嵌入到我们的公司环境中。我们有一个自己的启动器应用程序,我必须使用它。对于这个启动程序应用程序,我需要一个带有main方法的启动类,该方法将在启动时被调用,并且我必须在其中启动springbatch
是手动分配
JobLauncher
并使用此启动器运行作业的唯一方法,或者Spring Batch中是否有支持该方法的类(或者有人知道示例)?是的,您可以通过编程方式启动作业。如果您看到的是CommandLineJobRunner
,那么main方法只需创建一个Spring上下文并使用启动器来运行作业。因此,您可以在新应用程序中执行此操作。可以使用JobLauncher以编程方式调用作业。如果您正在寻找从webapp触发作业的方法,JobLauncher可以自动连接到Servlet/控制器中:
如果您不想使用CommandLineRunner(出于某种原因,或者如果您需要一些自定义逻辑),可以使用Spring启动应用程序,您可以执行以下操作:
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容器初始化的:(.知道为什么吗?它对我很有效。我进行了更改以停止作业的默认执行。在application.properties中添加了一行:-Spring.batch.job.enabled=false