@EnableScheduling顾名思义就是使计划任务可以使用,其实就是用来使@Schedule注解功能可用的注解。当开发者在XXXApplication类中添加@EnableScheduling开启对定时任务的支持,在相应的方法上添加@Scheduled声明需要执行的定时任务。
其中Scheduled注解中有以下几个参数:
cron
zone
fixedDelay和fixedDelayString
fixedRate和fixedRateString
initialDelay和initialDelayString
1.cron是设置定时执行的表达式
<1> cron表达式可以分为两种:
1、6位长度的 秒 分 时 日 月 星期
2、7位长度的 秒 分 时 日 月 星期 年
一般都用的是6位长度的,因为很少碰到会区分年的定时任务
<2> 每个位置可以填充的东西:
秒: 可出现,- * / 四个字符,有效范围为0-59的整数
分: 可出现,- * / 四个字符,有效范围为0-59的整数
时: 可出现,- * / 四个字符,有效范围为0-23的整数
日: 可出现,- * / ? L W C八个字符,有效范围为0-31的整数
月: 可出现,- * / 四个字符,有效范围为1-12的整数或JAN-DEC
星期: 可出现,- * / ? L C #四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天
年: 可出现,- * / 四个字符,有效范围为1970-2099年
<3> 字符代表的意思:
1) * 代表所有
2)?只用于日和星期,它也匹配域的任意值,但实际不会。因为DayofMonth和 DayofWeek会相互影响。例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法: 13 13 15 20 * ?, 其中最后一位只能用?,而不能使用*,如果使用*表示不管星期几都会触发,实际上并不是这样。
3) - 代表范围
4) / 代表从什么时候开始,隔固定时间执行,前面的数字代表开始的时间,后面的数字代表间隔
5),多个数字就用,隔开
6) L 只用于日和星期,代表最后一个
7) W 只用于日,代表有效工作日,就是离当前数字最近的一个工作日
8) LW 代表某个月的最后一个星期几
9) # 代表每个月第几个星期几
此段学习自http://www.cnblogs.com/summertime-wu/p/7641589.html
2.zone表示执行时间的时区
3.fixedDelay 和fixedDelayString 表示一个固定延迟时间执行,上个任务完成后,延迟多长时间执行
4.fixedRate 和fixedRateString表示一个固定频率执行,上个任务开始后,多长时间后开始执行
5.initialDelay 和initialDelayString表示一个初始延迟时间,第一次被调用前延迟的时间
配置类
@SpringBootApplication
@EnableScheduling
public class TeatimeApplication {
public static void main(String[] args){
SpringApplication.run(TeatimeApplication.class, args);
}
}
task任务类
@Component
public class TestSvr {
@Resource
InteractionSvr interactionSvr;
@Value("${scheduled.onOff}")
Boolean onoff;
@Scheduled(cron = "${scheduled.auto_sendMsg}")
public void autoSendMsg(){
if (onoff) { //自定义的开关 方便启停
interactionSvr.sendMsgByTime();
}
}
}
在application.yaml中定义的时间
scheduled:
onOff: true
auto_sendMsg: 0/5 * * * * ?