如何确保ThreadPoolTask​​Scheduler执行完成?

时间:2017-10-13 14:20:50

标签: java spring scheduler

我有一个场景,我在预定的时间间隔内(每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;
}

0 个答案:

没有答案