@Scheduled注解为定时任务
1. cron表达式里写执行的时机
(1) cron表达式是一个字符串,字符串以5或6个空格隔开,分开共6或7个域,每一个域代表一个含义;
(2) cron表达式语法:[秒] [分] [小时] [日] [月] [周] [年];
(3) [年]不是必须的域,可以省略[年],则一共6个域;
cron规则:
特殊字符表达式
*:代表所有可能的值
-:指定范围
,:列出枚举 例如在分钟里,"5,15"表示5分钟和20分钟触发
/:指定增量 例如在分钟里,"3/15"表示从3分钟开始,没隔15分钟执行一次
?:表示没有具体的值,使用?要注意冲突
L:表示last,例如星期中表示7或SAT,月份中表示最后一天31或30,6L表示这个月倒数第6天,FRIL表示这个月
的最后一个星期五
W:只能用在月份中,表示最接近指定天的工作日
#:只能用在星期中,表示这个月的第几个周几,例如6#3表示在每月的第三个周六
小提示:
(1) ’L’和 ‘W’可以一组合使用。如果在日字段上设置”LW”,则表示在本月的最后一个工作日触发;周字段的设置,若使用英文字母是不区分大小写的,即MON与mon相同。
示例
"0 0 12 * * ?" 每天中午十二点触发
"0 15 10 ? * *" 每天早上10:15触发
"0 15 10 * * ?" 每天早上10:15触发
"0 15 10 * * ? *" 每天早上10:15触发
"0 0 10,14,16 * * ?" 每天上午10点,下午2点,4点
"0 0/30 9-17 * * ?" 朝九晚五工作时间内每半小时
"0 15 10 * * ? 2005" 2005年的每天早上10:15触发
"0 * 14 * * ?" 每天从下午2点开始到2点59分每分钟一次触发
"0 0/5 14 * * ?" 每天从下午2点开始到2:55分结束每5分钟一次触发
"0 0/5 14,18 * * ?" 每天下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发
"0 0-5 14 * * ?" 每天14:00至14:05每分钟一次触发
"0 10,44 14 ? 3 WED" 三月的每周三的14:10和14:44触发
"0 0 12 ? * WED" 每个星期三中午12点
"0 15 10 ? * MON-FRI" 每个周一,周二,周三,周四,周五的10:15触发
"0 15 10 15 * ?" 每月15号的10:15触发
"0 15 10 L * ?" 每月的最后一天的10:15触发
"0 15 10 ? * 6L" 每月最后一个周五的10:15触发
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月最后一个周五的10:15触发
"0 15 10 ? * 6#3" 每月的第三个周五的10:15触发
"0 0 */1 * * ?" 每小时执行一次
"0 0/5 * * * ?" 每五钟执行一次
"*/5 * * * * ?" 每隔5秒执行一次
"0 */1 * * * ?" 每隔1分钟执行一次
"0 0 23 * * ?" 每天23点执行一次
"0 0 1 1 * ?" 每月1号凌晨1点执行一次
2.zone
时区,接收一个java.util.TimeZone#ID
。cron表达式
会基于该时区解析。默认是一个空字符串,即取服务器所在地的时区。比如我们一般使用的时区Asia/Shanghai
。该字段我们一般留空。
3.fixedDelay
上一次执行完毕时间点之后多长时间再执行,如:
//上一次执行完毕时间点之后5秒再执行
@Scheduled(fixedDelay = 5000)
4.fixedDelayString
与fixedDelay意思相同,只是使用字符串的形式。唯一不同的是支持占位符。如:
//上一次执行完毕时间点之后5秒再执行
@Scheduled(fixedDelayString = "5000")
/**
* 占位符的使用(配置文件中有配置:time.fixedDelay=5000):
*/
@Scheduled(fixedDelayString = "${time.fixedDelay}")
public void testFixedDelayString() {
System.out.println("Execute at " + System.currentTimeMillis());
}
5. fixedRate
上一次开始执行时间点之后多长时间再执行。如:
//上一次开始执行时间点之后5秒再执行
@Scheduled(fixedRate = 5000)
6. fixedRateString
与fixedRate意思相同,只是使用字符串的形式。唯一不同的是支持占位符。
7.initialDelay
第一次延迟多长时间后再执行。如:
//第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次
@Scheduled(initialDelay=1000, fixedRate=5000)
8. initialDelayString
与initialDelay意思相同,只是使用字符串的形式。唯一不同的是支持占位符。