Spring Task定时任务之详解cron fixedDelay fixedRate
背景介绍
Spring非常强大,自带了Spring Task任务调度框架,基本能满足日常需求。比之更全面的框架还有quartz。相对的,学习成本也更高,有待下次学习分享。
Spring Task
Spring Task也分为注解和xml配置两种形式,由于开发的简洁性和便捷性,在开发时,一般推荐使用注解形式,只需在方法上添加一个注解@Scheduled,即代表开始定时任务。
@Scheduled有三个属性:
- cron :cron表达式是定时任务的关键,通过这个表达式能够清晰的知道任务什么时候执行,对于执行时间的设定非常的灵活。cron表达式的详细内容将在下次介绍分享;
- fixedDelay:fixedDelay控制方法执行的间隔时间,是以上一次方法执行完开始算起,如上一次方法执行阻塞住了,那么直到上一次执行完,并间隔给定的时间后,执行下一次;
- fixedRate :fixedRate是按照一定的速率执行,是从上一次方法执行开始的时间算起,如果上一次方法阻塞住了,下一次也是不会执行,但是在阻塞这段时间内累计应该执行的次数,当不再阻塞时,一下子把这些全部执行掉,而后再按照固定速率继续执行。;
区别
在 Spring 的 Scheduled 注解的 JavaDoc 对此的解释很简单
public abstract long fixedRate
Execute the annotated method with a fixed period in milliseconds between invocations.
public abstract long fixedDelay
Execute the annotated method with a fixed period in milliseconds between the end of the last invocation and the start of the next.
** fixedRate 任务两次执行时间间隔是任务的开始点,而 fixedDelay 的间隔是前次任务的结束与下次任务的开始**
以上都是在单线程的情况下执行情况。若是有线程阻塞的情况发生,就需要多线程执行定时任务,这种情况又不大一样了。具体情况请参考:
https://yanbin.blog/spring-schedule-runner-threads/