1. 根据配置文件 创建ScheduledTaskRegistrar 对象之后,
TaskScheduler taskScheduler 任务池 已有值;
Map<Runnable, String> cronTasks 计划任务map,key为任务对象,value为定时表达式
Set<ScheduledFuture<?>> scheduledFutures = new LinkedHashSet<ScheduledFuture<?>>(); 被创建
2.ScheduledTaskRegistrar.afterPropertiesSet()被执行
根据 cronTasks 创建 ScheduledFuture 放入 scheduledFutures 中
如下:
for (Map.Entry<Runnable, String> entry : this.cronTasks.entrySet()) {
this.scheduledFutures.add(this.taskScheduler.schedule(entry.getKey(), new CronTrigger(entry.getValue())));
}
(1)创建ScheduledFuture 是通过创建ReschedulingRunnable 对象调用对应的 schedule() 方法来完成。
(2)在 ReschedulingRunnable . schedule() 中,根据表达式计算当前任务下次执行时间,然后将this, 也就是ReschedulingRunnable对象本身,
交由 taskScheduler 任务池 去执行。
(3)任务池到时执行 ReschedulingRunnable 对象的run方法&
TaskScheduler taskScheduler 任务池 已有值;
Map<Runnable, String> cronTasks 计划任务map,key为任务对象,value为定时表达式
Set<ScheduledFuture<?>> scheduledFutures = new LinkedHashSet<ScheduledFuture<?>>(); 被创建
2.ScheduledTaskRegistrar.afterPropertiesSet()被执行
根据 cronTasks 创建 ScheduledFuture 放入 scheduledFutures 中
如下:
for (Map.Entry<Runnable, String> entry : this.cronTasks.entrySet()) {
this.scheduledFutures.add(this.taskScheduler.schedule(entry.getKey(), new CronTrigger(entry.getValue())));
}
(1)创建ScheduledFuture 是通过创建ReschedulingRunnable 对象调用对应的 schedule() 方法来完成。
(2)在 ReschedulingRunnable . schedule() 中,根据表达式计算当前任务下次执行时间,然后将this, 也就是ReschedulingRunnable对象本身,
交由 taskScheduler 任务池 去执行。
(3)任务池到时执行 ReschedulingRunnable 对象的run方法&