DengQN·一个普通程序员;
SpringBoot的Scheduled
2018-09-30 17:00 61
#执行#表示#定时#一次#延时#注解#秒#分#时

Schedule

有时候需用到定时的功能去实现一些功能。比如定时发送一些邮件、发送一些推送等。

这时候需要用到Scheduled注解

在SpringBoot中开启Schedule

  • 先要在启动类中加上@EnableScheduling注解

  • 创建++Component++

  • 编写schedule方法并打上@Scheduled注解

比如

/**
 * @author dqn
 * created at 2018/8/2 - 17:33
 */
@Component
public class TestSchedule {
    Logger logger = LoggerFactory.getLogger(TestSchedule.class);
    /**
     *  cron *  *  *  *  *  *
     *      秒 分 时 号 月 星期X
     *      0-59 0-59 0-24 1-31 1-12 1-7
     *      其实还有一位可以空, 年份,1970-2099
     *  定时任务,符合cron表达式的时候触发
     */
    @Scheduled(cron = "0 * * * * *")
    public void testCommon(){
        logger.info("common "+Instant.now().toString());
    }

    /**
     * 在执行完后fixedDelay后执行
     */
    @Scheduled(fixedDelay = 1000)
    public void testFixDelay(){
        logger.info("delay "+Instant.now().toString());
    }

    /**
     * 第一次缓initDelay后执行
     * 之后在执行完后fixedDelay后执行
     */
    @Scheduled(initialDelay = 1000,fixedDelay = 1000)
    public void testInitDelay(){
        logger.info("delay "+Instant.now().toString());
    }

    /**
     * 在前一次 开始 执行后fixedRate后执行
     */
    @Scheduled(fixedRate = 2000)
    public void testRateDelay(){
        logger.info("rate "+Instant.now().toString());
    }
}

注解的一些配置

第一类,定时任务

第一种是定时任务,在@Scheduled中的cron值加上一个表达式,用来表示在某个时间的形式符合这个表达式时执行方法。

cron-like expression

表达式一般是这样的: * * * * * * *

一共7个位置,最后一个可以不填,也就是说++可以++只设置6位。

从左到右按顺序是: 秒、分、时、日、月、周X、

他们的值分别是:

  • 0-59 秒
  • 0-59 分
  • 0-23 时
  • 1-31 日
  • 1-12 月
  • 1-7 周
  • 1970-2099 年

例子

0 * * * * ? 表示每次秒到0的时候触发,即每分钟触发一次。

0 0 * * * ? 表时每次分到0的,每小时一次,也可以 * 0 * * * *

* * 3 * * ? 表示每天3点执行

* * 3 15 * ? 表示每个月的15号的3点执行。问号表示不确定,或者说都可以,因为星期X是冲突的

* * 3 ? * 1 表示每周一的3点执行,相应的,日期是?号

* * 3-5 * * ? 表示每天的3、4、5点都执行, - 表示范围(range)

同时还提供了 3,6,9 表示一个列表值,还有2/10表示从2开始,每次递增10。

延时任务

延时有两种,开始后延时、完成后延时

fixedDelay

fixedDelay 表示在上一次执行后延时 XX 时间后执行

fixedRate

fixedRate表示在上一次开始执行就计时,在XX时间后执行