1.创建一个定时任务类UserJob,使用@Component注解。编写定时任务的方法,并使用@Scheduled注解
@Scheduled(fixedDelay = 1000)
public void sendMsg(){
LOGGER.info("excute ....");
}
@Scheduled中可以接受的参数有以下几种
cron:指定cron表达式
zone:默认使用服务器默认时区。可以设置为java.util.TimeZone中的zoneId
fixedDelay:从上一个任务完成开始到下一个任务开始的间隔,单位毫秒
fixedDelayString:同上,时间值是String类型
fixedRate:从上一个任务开始到下一个任务开始的间隔,单位毫秒
fixedRateString:同上,时间值是String类型
initialDelay:任务首次执行延迟的时间,单位毫秒
initialDelayString:同上,时间值是String类型
其中cron表达式一般分为6或者7个域,每个域都代表着一种意思,也可以使用*,或者?等符号代替。
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年
:表示匹配该域的任意值,假如在Minutes域使用, 即表示每分钟都会触发事件。
?:只能用在DayofMonth和DayofWeek两个域。它也匹配域的任意值,但实际不会。因为DayofMonth和 DayofWeek会相互影响。例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法: 13 13 15 20 ?, 其中最后一位只能用?,而不能使用,如果使用*表示不管星期几都会触发,实际上并不是这样。
使用如下,表示每天9点的时候执行任务:
@Scheduled(cron = "0 0 9 * * ?")
public void birthdayJob(){
LOGGER.info("每天9点执行的任务");
}
2.在App启动类中加入@EnableScheduling,表示该项目支持定时任务。