我有一个场景,我在预定的时间间隔内(每5分钟)从数据库中读取数据,然后在下一次运行开始之前执行它们。
以下是执行此操作的代码段。 ThreadPoolTaskScheduler
从Spring注入一个bean。
在将下一组记录添加到workflowSchedules
之前,如何确保所有ThreadPoolTaskScheduler
次执行完成。每次读取数据库后都会调用方法queueAndExecuteWorkflowRuns
。
private void queueAndExecuteWorklowRuns(Seq<WorkflowSchedule> workflowSchedules) {
for (WorkflowSchedule workflowSchedule : workflowSchedules) {
try {
long minutes = ChronoUnit.MINUTES.between(OffsetDateTime.now(), workflowSchedule.getNextRunDate());
threadPoolTaskScheduler.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
startPendingWorkflow(workflowSchedule);
}
},
TimeUnit.MINUTES.toMillis(minutes + 1));
} catch (Exception e) {
log.error("Exception while adding workflow to scheduled pool with id " + workflowSchedule.getId()
+ " and run date " +
workflowSchedule.getNextRunDate());
}
}
}
@Bean(name = "workflowSchedulerExecutor")
public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
ThreadPoolTaskScheduler threadPoolTaskScheduler
= new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(1);
return threadPoolTaskScheduler;
}