SpringBoot添加定时器

方法一:通过springboot自带入口来开启定时器。

首先我们都知道,springboot有一个自己的入口,也就是@SpringBootApplication(他是一个组合注解 由@Configuration,@EnableAutoConfiguration和@ComponentScan组成)。

首先定时器需要有一个总开关,因为可能要定时很多函数,如果我想全都暂时关上总不能一个一个把注解给删掉吧。所以我们需要先把总开关打开,也就是在springboot的入口处添加@EnableScheduling这个注解。上代码(此为springboot的入口)

@SpringBootApplication  
@EnableScheduling  
public class DemoApplication {  
  
    public static void main(String[] args) {  
        SpringApplication.run(DemoApplication.class, args);  
    }  
} 

 

总开关添加好后,我们只需要对需要定时方法进行配置即可,使用注解@Scheduled(cron = "0/2 * * * * *") 后面为Cron表达式。表示每2秒执行一次。

@Scheduled(cron = "0/2 * * * * *")  
public void timer(){  
    //获取当前时间  
    LocalDateTime localDateTime =LocalDateTime.now();  
    System.out.println("当前时间为:" + localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));  
}  

 

Cron表达式的用法:

符号的意义:

(1)* 表示可以匹配该域的所有值;

例如,"0 0 13 * * ?"表示每天的13点执行一次。

(2)?在cron表达式中必须出现且只能出现1次,用在日域或周域上,表示不确定值、不限制值;

它与*的区别是,并不能匹配到该域上的所有值,例如指定了3月份每个周五,那么3月份的周五可能只有4个值;

例如,"0 0 5 6 * ?"表示每个月6日5点钟执行而无论周几,"0 0 5 ? * 3"表示每个周三5点钟执行而无论是几号。

(3)- 表示匹配该域上的一个范围;

例如,"0 30 9-15 ? * *"表示每天的9:30-15:30每小时执行一次,"0 1-5 * ? * 1"表示每周日每个小时的1-5分钟每分钟执行一次。

(4), 表示枚举值;

例如,"0 0 8,16,23 ? * 1,7"表示每个周六日的8点、16点、23点各执行一次。

(5)/ 表示起始时间和间隔时间;

例如,"0 0 3/5 * * ?"表示每天3点开始执行,每隔5个小时执行一次,即3点、8点、13点、18点、23点各执行一次,

"*/5 * * * * ?"表示每隔5秒钟执行一次,"0 */1 * * * ?"表示每隔1分钟执行一次。

(6)# 只能用于周域上,#后面的数字表示第几周,如果不存在这个周的值,则不执行;

例如,"0 0 0 ? * 5#2"表示每个月第2个周四零点执行,"15 30 6 ? * 7#5"表示每个月第5个周六6:30:15执行,如果某个月不存在第5个周六,则不执行。

(7)L 只能用于日域或周域,用于日域时表示当月最后一天,用于周域如果前面不加数字表示周六,加数字表示最后一个周值;

例如,"0 0 23 L * ?"表示每月最后一天的23点执行,"0 0 23 ? * L"表示每周六的23点执行,"0 0 23 ? * 3L"表示每月最后一个周二的23点执行。

意义 表达式
 每隔5秒钟执行一次            */5  *  *  *  * ?
 每隔1分钟执行一次            0  */1  *  *  *  ?
 每搁1小时执行一次        0  0 */1  *  *  ?
 每天23点55分执行一次     0  55  23  *  *  ?
 每月最后一天23点执行一次     0  0  23  L  *  ?
 每周六8点执行一次     0  0  8  ? *  L
 每月最后一个周五,每隔2小时执行一次     0  0  */2  ?  *  6L
 每月的第三个星期五上午10:15执行一次     0  15  10  ?  *  5#3
 在每天下午2点到下午2:05期间的每1分钟执行     0  0-5  14  *  *  ?
 表示周一到周五每天上午10:15执行     0  15  10  ?  *  2-6
 每个月的最后一个星期五上午10:15执行     0  15  10  ?  *  6L 
 每天上午10点,下午2点,4点执行一次     0  0  10,14,16  * * ?
 朝九晚五工作时间内每半小时执行一次     0  0/30  9-17  *  * ?
 每个星期三中午12点执行一次     0  0  12  ?  *  4
 每年三月的星期三的下午2:10和2:44各执行一次       0  10,44  14  ?  3  4 
 每月的第三个星期五上午10:15执行一次     0  15  10  ?  *  6#3
 每月一日凌晨2点30执行一次     0  30  2  1  *  ?
 每分钟的第10秒与第20秒都会执行     10,20  *  *  *  * ?
 每月的第2个星期的周5,凌晨执行     0  0  0  ?  *  6#2
posted @ 2021-04-26 16:26  万里哥  阅读(1206)  评论(0编辑  收藏  举报