任务调度工具对比

层次举例特点
操作系统Linux crontab
Windows 计划任务
只能执行简单脚本或者命令
数据库MySQL、Oracle可以操作数据。不能执行Java 代码
工具Kettle可以操作数据,执行脚本。没有集中配置
开发语言JDK Timer、ScheduledThreadPoolTimer:单线程
JDK1.5 之后:ScheduledThreadPool(Cache、Fiexed、
Single):没有集中配置,日程管理不够灵活
容器Spring Task、@Scheduled不支持集群
分布式框架分布式框架XXL-JOB,Elastic-Job 

@Scheduled也是用 JUC的 ScheduledExecutorService实现的 Scheduled(cron = “0 15 10 15 * ?”) 

1、 ScheduledAnnotationBeanPostProcessor的 postProcessAfterInitialization方法将@Scheduled的方法包装为指定的 task添加到 ScheduledTaskRegistrar中 

2、 ScheduledAnnotationBeanPostProcessor会监听 Spring的容器初始化事件,在 Spring容器初始化完成后进行 TaskScheduler实现类实例的查找,若发现有 SchedulingConfigurer的实现类实例,则跳过 3 

3、查找 TaskScheduler的实现类实例默认是通过类型查找,若有多个实现则会查找名字为 "taskScheduler"的实现 Bean,若没有找到则在 ScheduledTaskRegistrar调度任务的时候会创建一个 newSingleThreadScheduledExecutor,将 TaskScheduler的实现类实例设置到 ScheduledTaskRegistrar属性中 

4、 ScheduledTaskRegistrar的 scheduleTasks方法触发任务调度 

5、真正调度任务的类是 TaskScheduler实现类中的 ScheduledExecutorService,由 J.U.C提供 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值