从控制器运行弹簧批处理作业

时间:2015-02-17 16:36:57

标签: spring spring-mvc spring-boot spring-batch

我正在尝试从控制器运行我的批处理作业。它将由cron作业或访问特定链接启动。 我正在使用Spring启动,没有XML只是注释。 在我当前的设置中,我有一个包含以下bean的服务:

@EnableBatchProcessing
@PersistenceContext
public class batchService{

@Bean
public ItemReader<Somemodel> reader() {
...
}

@Bean
    public ItemProcessor<Somemodel, Somemodel> processor() {
        return new SomemodelProcessor();
    }
@Bean
    public ItemWriter writer() {
        CustomItemWriter writer = new CustomItemWriter();
            return writer; 
    }
@Bean
    public Job importUserJob(JobBuilderFactory jobs, Step s1) {
        return jobs.get("importUserJob")
                .incrementer(new RunIdIncrementer())
                .flow(s1)
                .end()
                .build();
    }

@Bean
public Step step1(StepBuilderFactory stepBuilderFactory,       
ItemReader<somemodel> reader,
            ItemWriter<somemodel> writer, ItemProcessor<somemodel,   
somemodel> processor) {
        return stepBuilderFactory.get("step1")
                .<somemodel, somemodel> chunk(100)
                .reader(reader)
                .processor(processor)
                .writer(writer)
                .build();
    }   
}   

只要将@Configuration注释放在我的batchService类之上,作业就会在我运行应用程序后立即启动。它成功完成,一切都很好。现在我试图删除@Configuration注释并随时运行它。有没有办法从控制器中触发它?

谢谢!

3 个答案:

答案 0 :(得分:21)

您需要在src / main / resources中创建application.yml文件并添加以下配置:

spring.batch.job.enabled: false

通过此更改,批处理作业将不会在Spring Boot启动时自动执行。并且在特定链接时将触发批处理作业。

在此处查看我的示例代码: https://github.com/pauldeng/aws-elastic-beanstalk-worker-spring-boot-spring-batch-template

答案 1 :(得分:15)

您可以使用可以注入控制器的JobLauncher以编程方式启动批处理作业。有关详细信息,请参阅Spring Batch documentation,包括此示例控制器:

@Controller
public class JobLauncherController {

    @Autowired
    JobLauncher jobLauncher;

    @Autowired
    Job job;

    @RequestMapping("/jobLauncher.html")
    public void handle() throws Exception{
        jobLauncher.run(job, new JobParameters());
    }
}

答案 2 :(得分:4)

由于您正在使用Spring Boot,因此应将@Configuration注释保留在那里,而是将application.properties配置为不在启动时启动作业。您可以在Spring Boot文档中阅读有关在启动时(或不启动)运行作业的自动配置选项的更多信息:http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-execute-spring-batch-jobs-on-startup