定时任务
根据需要,新建MonitorSchedule类来实现监测服务的定时运行
基于注解(@Scheduled)
基于注解@Scheduled默认为单线程,开启多个任务时,任务的执行时机会受上一个任务执行时间的影响。
- @EnableScheduling : 在配置类上使用,开启计划任务的支持
- @Scheduled : 来声明这是一个任务,包括 cron,fixDelay,fixRate 等类型
定时调用监测服务
1 |
|
@Scheduled - Cron
Scheduled注解类源码
1 | package org.springframework.scheduling.annotation; |
1 |
说明 | 是否必填 | 允许填写的值 | 允许的通配符 |
---|---|---|---|
秒 | 是 | 0-59 | , - * / |
分 | 是 | 0-59 | , - * / |
小时 | 是 | 0-23 | , - * / |
日 | 是 | 1-31 | , - * ? / L W |
月 | 是 | 1-12 or JAN-DEC | , - * / |
周 | 是 | 1-7 or MON-SUN | , - * ? / L # |
年 | 否 | empty 或 1970-2099 | , - * / |
通配符含义
, : 表示指定多个值,例如在周字段上设置 “MON,WED,FRI” 表示周一,周三和周五触发
- : 表示区间。例如 在小时上设置 “10-12”,表示 10,11,12点都会触发
* : 表示所有值. 例如:在分的字段上设置,表示每一分钟都会触发
/ : 用于递增触发。如在秒上面设置”5/15” 表示从5秒开始,每增15秒触发(5,20,35,50)。在月字段上设置’1/3’所示每月1号开始,每隔三天触发一次
L : 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年), 在周字段上表示星期天,相当于”7”或”SUN”。如果在”L”前加上数字,则表示该数据的最后一个。例如在周字段上设置”6L”这样的格式,则表示“本月最后一个星期六”
W : 表示离指定日期的最近那个工作日(周一至周五). 例如在日字段上设置”15W”,表示离每月15号最近的那个工作日触发,如果指定格式为 “1W”,它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注,”W”前只能设置具体的数字,不允许区间”-“).
LW : 表示在本月的最后一个工作日触发
# : 表示每月的第几个周几,例如在周字段上设置”6#3”表示在每月的第三个周六.注意如果指定”6#5”,正好第五周没有周六,则不会触发该配置
@Scheduled - Zone
时区,接收一个 java.util.TimeZone#ID 。cron表达式会基于该时区解析,默认是一个空字符串,即取服务器所在地的时区。
1 |
@Scheduled - fixedDelay
上一次
1 | //上一次执行完毕时间点之后5秒再执行 |
@Scheduled - fixedDelayString
与fixedDelay意思相同,只是使用字符串的形式,支持占位符:
1 | //上一次执行完毕时间点之后5秒再执行 |
@Scheduled - fixedRate
上一次
1 | //上一次开始执行时间点之后5秒再执行 |
@Scheduled - fixedRateString
与fixedRate意思相同,只是使用字符串的形式,支持占位符:
1 | //上一次开始执行时间点之后5秒再执行 |
@Scheduled - initialDelay
1 | //第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次 |
@Scheduled - initialDelayString
与initialDelay意思相同,只是使用字符串的形式,支持占位符:
1 | ////根据配置文件设置间隔,默认第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次 |