天天看点

@Scheduled中fixedDelay、initialDelay 和cron表达式的解析及区别

注解参数区别

@Scheduled注解可以控制方法定时执行,其中有三个参数可选择:

1、fixedDelay控制方法执行的间隔时间,是以上一次方法执行完开始算起,如上一次方法执行阻塞住了,那么直到上一次执行完,并间隔给定的时间后,执行下一次。

2、fixedRate是按照一定的速率执行,是从上一次方法执行开始的时间算起,如果上一次方法阻塞住了,下一次也是不会执行,但是在阻塞这段时间内累计应该执行的次数,当不再阻塞时,一下子把这些全部执行掉,而后再按照固定速率继续执行。

3、cron表达式可以定制化执行任务,但是执行的方式是与fixedDelay相近的,也是会按照上一次方法结束时间开始算起。

4、initialDelay 。如: @Scheduled(initialDelay = 10000,fixedRate = 15000

这个定时器就是在上一个的基础上加了一个initialDelay = 10000 意思就是在容器启动后,延迟10秒后再执行一次定时器,以后每15秒再执行一次该定时器。

举例:定时容器启动后,延迟1毫秒再执行定时器(基本就是容器起来后就执行了),以后每10秒再执行一次该定时器,保证内存对象里的内容及时刷新。

直接上代码==================

@Component
public class TestTask {

    @Autowired
    TestProvider testProvider;
    /**
     * 权限定时刷新
     */
    @Scheduled(initialDelay = 1,fixedDelay=10000)
    public void run() {
            testProvider.refresh();
    }
}