如何连续运行Spring Batch作业

时间:2014-04-10 08:46:36

标签: spring-batch

连续运行Spring Batch作业的最佳方法是什么?我们是否需要编写一个shell文件,以预定义的时间间隔循环并启动作业?或者在Spring Batch本身中有一种方法来配置作业,以便它在

处重复

1)预定义的间隔

2)每次运行完成后

由于

3 个答案:

答案 0 :(得分:3)

如果要定期启动作业,可以合并Spring Scheduler和Spring Batch。这是一个具体的例子:Spring Scheduler + Batch Example

如果您想继续重新启动工作(确定如此!),您可以在工作中配置Job Listener。然后,通过方法jobListener.afterJob(JobExecution jobExecution),您可以重新开始工作。

答案 1 :(得分:1)

我为导入电子邮件做了类似的事情,所以我必须定期检查

@SpringBootApplication
@EnableScheduling
public class ImportBillingFromEmailBatchRunner
{
    private static final Logger LOG = LoggerFactory.getLogger(ImportBillingFromEmailBatchRunner.class);

    public static void main(String[] args)
    {
        SpringApplication app = new SpringApplication(ImportBillingFromEmailBatchRunner.class);
        app.run(args);
    }

    @Bean
    BillingEmailCronService billingEmailCronService()
    {
        return new BillingEmailCronService();
    }

}

所以BillingEmailCronService负责延续:

public class BillingEmailCronService
{
    private static final Logger LOG = LoggerFactory.getLogger(BillingEmailCronService.class);

    @Autowired
    private JobLauncher jobLauncher;

    @Autowired
    private JobExplorer jobExplorer;

    @Autowired
    private JobRepository jobRepository;

    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    @Autowired
    private @Qualifier(BillingBatchConfig.QUALIFIER)
    Step fetchBillingFromEmailsStep;

    @Scheduled(fixedDelay = 5000)
    public void run()
    {
       LOG.info("Procesando correos con facturas...");
       try
       {
          Job job = createNewJob();
          JobParameters jobParameters = new JobParameters();
          jobLauncher.run(job, jobParameters);
       }catch(...)
       {
          //Handle each exception
       }
    }
}

实施您的createNewJob逻辑并尝试一下。

答案 2 :(得分:0)

一种简单的方法是从Unix配置cron作业,它将以指定的时间间隔运行应用程序