目录
1、作用
定义在方法上,让方法按照表达式约束的时间自动触发
2、前提
1.1、需搭建好spring环境
1.2、使用的时候,将其注解带上表达式写在方法上,注意类上也是需要注解的(@Service/@Component)
public class ScheduleTest{
// 每隔1s执行一次
@Scheduled(fixedDelay = 1000)
public void yzEventProcess() {
}
// 从0秒开始,每隔5分钟执行一次
@Scheduled(cron = "0 */5 * * * ? ")
public void yzEventProcess() {
}
}
2、关于表达式:
2.1、cron
2.1、语法
Cron表达式由6或7个空格分隔的时间字段组成:
[秒] [分钟] [小时] [日期] [月份] [星期] [年{可选}]
字段 | 允许值 | 允许的特殊字符 | 特殊字符说明 |
秒 | 0-59 | , - * / | 【,】表示不连续的值,如“0,5,10”--》意味着0秒,5秒,10秒的时间 【-】表示连续的值,如“0-5”-》意味着0秒,1秒,2秒,3秒,4秒,5秒的时间 【*】表示任意值,如:*每秒钟 【/】表示字符用于指定增量,如:“0/5”-》每隔5秒 |
分 | 0-59 | , - * / | 【,】表示不连续的值 【-】表示连续的值 【*】表示任意值 【/】表示字符用于指定增量。 |
小时 | 0-23 | , - * / | 【,】表示不连续的值 【-】表示连续的值 【*】表示任意值 【/】表示字符用于指定增量。 |
日期 | 1-31 | , - * ? / L W C | 【,】表示不连续的值 【-】表示连续的值 【*】表示任意值 【?】表示任意值,被用于天(月)和天(星期)两个子表达式,表示不指定值;当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?” 【/】表示字符用于指定增量。 【L】是‘last’的省略写法,可以表示day-of-month和day-of-week,day-of- month域中表示一个月的最后一天 【W】字符只允许日期域出现,表示与指定日期最近的工作日,如15w,如果15号刚好是星期日,那么这个任务会在16号触发;如果15号是星期六则14号触发;如果15号是星期一~星期五之间则15号触发 “L”和“W”可以在日期域中联合使用,LW表示这个月最后一周的工作日。 只能单个数字使用,不能在区域里面使用 【C】允许在日期域和星期域出现 |
月份 | 1-12 | , - * / | 【,】表示不连续的值 【-】表示连续的值 【*】表示任意值 【/】表示字符用于指定增量。 |
星期 | 1-7 | , - * ? / L C # | 【,】表示不连续的值 【-】表示连续的值 【*】表示任意值 【/】表示字符用于指定增量。 【L】是‘last’的省略写法可以表示day-of-month和day-of-week域,day-of-week域表示‘7’或者‘SAT’ 【C】允许在日期域和星期域出现 【#】只允许在星期域中出现,用于确定第几个星期的星期就,如6#3,每个月的第三个星期的星期五 【?】表示任意值 |
年{可选} | 1970-2099 | , - * / | 【,】表示不连续的值 【-】表示连续的值 【*】表示任意值 【/】表示字符用于指定增量。 |
2.2、案例
表达式 | 说明 |
0 */5 * * * ? | 从0秒开始,每隔5分钟(也就是每个小时都会重新开始) |
0 0 * * * ? | 每隔1小时执行一次 |
0 0 */2 * * ?" | 每隔2小时执行一次 |
0 0 10,14,16 * * ? | 每天的10点,14点,16点触发 |
0 0/30 9-17 * * ? | 每天的9点-17点,每隔30分钟触发 |
0 0 12 ? * WED | 每周三的12点触发 |
0 0 12 * * ? | 每天12点触发 |
0 15 10 ? * * 、 0 15 10 * * ? 、 0 15 10 * * ? * | 每天的10:15触发 |
0 15 10 * * ? 2005 | 2005年的每天10:15触发 |
0 * 14 * * ? | 每天14:00-14:59每分钟触发一次 |
0 0/5 14 * * ? | 每天14:00-14:59,每隔5分钟触发一次 |
0 0-5 14 * * ? | 每天14:00-14:05,每隔1分钟触发一次 |
0 10,44 14 ? 3 WED | 3月的星期三,每天14:10和14:44触发一次 |
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触发 |
15/5 * * * * ? | 每分钟内,从第15秒开始,每隔5秒触发一次 |