企业级定时调度常用的有3种:
JDK自带的并发框架
开源的Quartz调度框架
基于前面两种进行封装的SPRING定时调度框架
调度方式:
- JDK自带的并发框架
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor( );
scheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
}
}, 10, 2, TimeUnit.MILLISECONDS);
开源的Quartz调度框架:
scheduler.scheduleJob(jobDetail, trigger);
SPRING定时调度框架:
SPRING对前面两种进行了简化封装,尤其是第一种;
对JDK并发框架的封装,对源码感兴趣的可以查看ScheduledAnnotationBeanPostProcessor和ScheduledTaskRegistrar的源码
配置举例:
<task:scheduled-tasks>
<task:scheduled ref="logImpTask" method="impActionLogToDb"
fixed-delay="5000" />
</task:scheduled-tasks>
ref含义:spring容器的beanId
method含义:调用的方法
fixed-delay:每隔多少时间调用(单位秒)
cron :cron表达式
对QUARTZ的封装,对源码感兴趣的可以查看SchedulerFactoryBean源码;
通过@Autowired Scheduler scheduler;
引用Scheduler后,调用quartz的相关方法,可以根据实际需要动态的增删调度。
除此之外还有分布调度,充分利用多节点优势进行任务计算,如:当当网的elasticjob