连续运行Spring Batch作业的最佳方法是什么?我们是否需要编写一个shell文件,以预定义的时间间隔循环并启动作业?或者在Spring Batch本身中有一种方法来配置作业,以便它在
处重复1)预定义的间隔
2)每次运行完成后
由于
答案 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作业,它将以指定的时间间隔运行应用程序