SpringBoot的定时任务 @Scheduled
1、@Scheduled的使用。
前提:
@SpringBootApplication @EnableScheduling //开启定时器 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class , args) ; } } |
使用位置:
注解@Scheduled 可以作为一个触发源添加到一个方法中。
@RestController //方法所在的类 要被 springboot 管理 public class ScheduledRest {
//在方法上加入@scheduled注解,启动项目定时任务就会自动触发 @Scheduled(cron = "0/1 * * * * ? ") //从 0 分钟 开始 间隔1s定时任务执行一次 public void scheduledTest01(){ System.out.println(DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:ss")+" testScheduled!!!"); } } |
fixedDelay 、fixeDelayString | 以毫秒为单位执行带注释的方法,结束最后一次调用,开始下一次调用。 返回值不同而已。 |
fixedRate 、fixedRateString | 以第一次调用为时间主以,固定周期(毫秒为单位)执行带注释的方法,也是返回值不同 |
initialDelay、initialDelayString | 第一次执行前延迟的毫秒数,返回值不同 |
zone |
cron表达式对应含义:
@Scheduled(cron = " * * * * * * ? *")
//根据Scheduled源码 解析对应参数 /* * <ul> * <li>second</li> 秒(0-59) * <li>minute</li>分钟 (0-59) * <li>hour</li>小时(0 -11) * <li>day of month</li>天 (0-31 视月份天数而定) * <li>month</li>月(1- 12) * <li>day of week</li>星期(1-7)(SUN,MON,TUE,WED,THU,FRI,SAT) 年份(1970-2009)可以省略 * </ul> */ |
每个参数并不一定是一个值,它们可以是一个表达式范围。(? 只是作为)
@Scheduled(cron = "10-30 * * * * ? " ) //在10s至30s范围内 每秒执行一次
@Scheduled(cron = "10-30 5 * * * ? " ) //在每小时的第5分钟 10s至30s范围内 每秒执行一次
@Scheduled(cron = "10-30 55-58 * * * ? " )//在每小时的第55分钟至58分钟 10s至30s范围内 每秒打印一次
@Scheduled(cron = "0 * * * * ? " ) //整分执行
@Scheduled(cron = "0 0 * * * ? " ) //整小时执行
@Scheduled(cron = "0 0 0 * * ? " ) //整天执行
@Scheduled(cron ="0 18 10 15 * ?") //每月15日上午10:18触发
@Scheduled(cron ="0 18 10 L * ?") //每月最后一日的上午10:18触发 L表示最后一天
@Scheduled(cron ="0 18 10 ? * 6L") //每月的最后一个星期五上午10:18触发
@Scheduled(cron ="0 18 10 ? * 6L 2002-2005") //2002年至2005年的每月的最后一个星期五上午10:18触发 |