项目中经常遇到一些需求就是需要你判断某个值是否到达要求的值或者某个条件下需要你执行某个动作,但你又不能一直判断,这时候我们需要使用定时器去设定某个时间去判断是否达到某个条件.
上干货,我使用的是spring中的定时器.我建立的是springboot项目.代码非
常简单.
以下是我的代码:
package com.example.demo.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/** * @author zjg * @day 18-2-5 * @description */
@Slf4j
@Component //使spring管理
@EnableScheduling //定时任务注解
public class Timer {
/** * 每天晚上21:50运行 */
@Scheduled(cron = "0 50 21 * * ?")
public void initTimerOne(){
log.info("我是在晚上21:50:00 定时器运行");
}
/** * 每天晚上21:50:30运行 */
@Scheduled(cron = "30 50 21 * * ?")
public void initTimerTwo(){
log.info("我是在晚上21:50:30 定时器运行");
}
}
效果如下图
@Component 这个注解是为了让spring管理这个类
@EnableScheduling 这个注解是定时任务的注解,这个注解添加在定时的类上或者Application类上都可以,效果是一样的.
@Scheduled 这个注解加在方法上,注明这是一个定时方法.
@Scheduled里面的参数讲解一下
scheduled表达式规则如下:
一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素
从左往右依次代表
1.Seconds Minutes Hours DayofMonth Month DayofWeek Year
2.Seconds Minutes Hours DayofMonth Month DayofWeek
每个域中字符如下:
Seconds: 可出现”, - * /”四个字符,有效范围为0-59的整数
Minutes: 可出现”, - * /”四个字符,有效范围为0-59的整数
Hours: 可出现”, - * /”四个字符,有效范围为0-23的整数
DayofMonth :可出现”, - * / ? L W C”八个字符,有效范围为0-31的整数
Month: 可出现”, - * /”四个字符,有效范围为1-12的整数或JAN-DEc
DayofWeek: 可出现”, - * / ? L C #”四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推
Year: 可出现”, - * /”四个字符,有效范围为1970-2099年
举些例子:
每隔5秒执行一次:”/5 * * * ?”
每隔1分钟执行一次:”0 /1 * * ?”
每天23点执行一次:”0 0 23 * * ?”
每天凌晨1点执行一次:”0 0 1 * * ?”
每月1号凌晨1点执行一次:”0 0 1 1 * ?”
每月最后一天23点执行一次:”0 0 23 L * ?”
每周星期天凌晨1点实行一次:”0 0 1 ? * L”
在26分、29分、33分执行一次:”0 26,29,33 * * * ?”
每天的0点、13点、18点、21点都执行一次:”0 0 0,13,18,21 * * ?”
表示在每月的1日的凌晨2点调度任务:”0 0 2 1 * ? *”
表示周一到周五每天上午10:15执行作业:”0 15 10 ? * MON-FRI”
表示2002-2006年的每个月的最后一个星期五上午10:15执行:”0 15 10 ? 6L 2002-2006”