希望某些需求在指定的时间点去执行。例如备份数据、发送邮件等。
首先需要了解一个知识点——时间表达式:
语法结构:
秒 分 时 日 月 星期 年(可以为空)
第一位:表示秒,取值范围: 0-59
第二位:表示分,取值范围: 0-59
第三位:表示小时,24小时制,取值 0-23
第四位:日期天/日,取值范围:1-31
第五位:日期月份,取值范围:1-12
第六位:星期,取值范围:1-7,表示星期一,星期二...
注意:1表示星期天,2表示星期一。
第七位:年份,可以留空
表达式:
*:每;如果写在秒上,表示每秒;写在分钟表示每分钟;
/:步长;例如,1/5,如果在秒上,表示,从第一秒开始,每5秒执行一次;
?:只能用在每月第几天和星期两个域。表示不指定值,当 2 个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”
-:表示范围,例如,在分域使用5-20,表示从5分到20分钟每分钟触发一次
,:枚举
L:last,表示最后,只能出现在星期和每月第几天域,如果在星期域使用1L,意味着在最后的一个星期日触发。
W:表示有效工作日(周一到周五),只能出现在每月第几日域,系统将在离指定日期的最近的有效工作日触发事件。注意一点,W的最近寻找不会跨过月份
LW:这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五
#:用于确定每个月第几个星期几,只能出现在每月第几天域。例如在1#3,表示某月的第三个星期日.
例如:
* * * * * * -> 每秒执行
0 0 2 * * ?-> 每天凌晨两点执行
生成表达式可参考:
http://qqe2.com/cron
编写一个定时任务类
@Component // 把这个类交给spirng管理
public class MyQuartz {
@Autowried
private Services service;
@Scheduled(cron="1,5,10 * * * * ?")// 定时任务的表达式
public void doIt(){
System.out.println(new Date());
}
}
启动类上开启定时任务
SpringBoot 默认支持定时任务,但是并不是所有的项目都需要用到定时任务。所以就给定时任务制定了开关,在需要的时候打开开关即可。
@EnableScheduling // 开启定时任务
案例:
/**定时器类
* 把这个类交给Spring容器管理
* 将MySchedule交给spring容器
*/
// 开启定时任务(项目需要的时候开启即可)
// @EnableScheduling
@Component
public class MySchedule {
// cron里面的参数依次代表:秒 分 时 日 月 星期 (年,可以省略)
@Scheduled(cron = "0/5 * * * * *",zone = "GMT")
public void MySchedule(){
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(date);
System.out.println(strDate);
}
}
只要在项目启动之后会在设置的每隔一段时间会自动执行一次。