任务调度工具对比
| 操作系統(tǒng) | Linux crontab Windows 計劃任務 | 只能執(zhí)行簡單腳本或者命令 |
| 數(shù)據庫 | MySQL、Oracle | 可以操作數(shù)據。不能執(zhí)行Java 代碼 |
| 工具 | Kettle | 可以操作數(shù)據,執(zhí)行腳本。沒有集中配置 |
| 開發(fā)語言 | JDK Timer、ScheduledThreadPool | Timer:單線程 JDK1.5 之后:ScheduledThreadPool(Cache、Fiexed、 Single):沒有集中配置,日程管理不夠靈活 |
| 容器 | Spring Task、@Scheduled | 不支持集群 |
| 分布式框架 | 分布式框架XXL-JOB,Elastic-Job | ? |
@Scheduled也是用 JUC的 ScheduledExecutorService實現(xiàn)的 Scheduled(cron = “0 15 10 15 * ?”)?
1、 ScheduledAnnotationBeanPostProcessor的 postProcessAfterInitialization方法將@Scheduled的方法包裝為指定的 task添加到 ScheduledTaskRegistrar中?
2、 ScheduledAnnotationBeanPostProcessor會監(jiān)聽 Spring的容器初始化事件,在 Spring容器初始化完成后進行 TaskScheduler實現(xiàn)類實例的查找,若發(fā)現(xiàn)有 SchedulingConfigurer的實現(xiàn)類實例,則跳過 3?
3、查找 TaskScheduler的實現(xiàn)類實例默認是通過類型查找,若有多個實現(xiàn)則會查找名字為 "taskScheduler"的實現(xiàn) Bean,若沒有找到則在 ScheduledTaskRegistrar調度任務的時候會創(chuàng)建一個?newSingleThreadScheduledExecutor,將 TaskScheduler的實現(xiàn)類實例設置到 ScheduledTaskRegistrar屬性中?
4、 ScheduledTaskRegistrar的 scheduleTasks方法觸發(fā)任務調度?
5、真正調度任務的類是 TaskScheduler實現(xiàn)類中的 ScheduledExecutorService,由 J.U.C提供?
?
總結
- 上一篇: 任务调度需求分析
- 下一篇: 任务调度框架Quartz基本介绍