## springboot的定时任务
### 两步编码实现定时任务。
- 开启定时任务注解 :打开冰箱门 @enableScheduling
- 设置定时时间,corn表达式。 @scheduled
- corn表达式
-- http://cron.qqe2.com
corn表达式:空格区分组成部分
秒 分 时 日 月 星期
0-59 0-59 0-23 1-31 1-12 1-7
,-*/ ,-*/ ,-*/ ,-*/?LWC ,-*/ ,-*/?L C #
* corn通用表达式
通用符号: ,-*?
,标识枚举值,例如在minutes域使用5,20.表示在时间的分钟为5,20时触发事件。
-表示范围,例如在minutes域中使用5-20,表示在时间的分钟为5-20时每分钟都触发事件。
\*表示匹配该区域的任意值,假如在minutes域使用*,表示时间分钟数不做限制,每分钟都触发时间。
/表示,起始时间开始触发,然后每间隔固定的时间触发一次。
思考题:
秒 分 时 日 月 周 年
0 0 2 1 * ? * 表达什么意思:
每月的一号的凌晨两点0分0秒。
秒 分 时 日 月 周
0 10,44 14 ? 3 WED:
0秒 14点10分,14点44分3月的星期三。
在每年的3月的星期三的14点10分0秒和14点44分0秒触发事件。
专用符号:
? 只能用在dayofmonth和dayofweek两个域中使用。
L 表示最后,
W 表示有效的工作日,只能出现dayofmonth域。系统将在离指定日期的最近的有效工作日触发事件。
\# 用于确定每个月第几个星期几,只能出现在dayofweek域,例如在 4#2,表示某月的第二个星期三。
专有符号:
专有符号除?后,在spring定时任务中都不支持。
秒 分 时 日 月 周
0 0/30 9-22 * * ?
表示:每年每月每日的9点到22点每30分钟触发事件,对星期几不设定。
0 0 9-22/4 * * ?
# 默认单线程的定时任务,如果事件持续事件较长,竟会将后续任务拖延,导致丢失任务。
# spring使用异步多线程实现,两步
- 1.打开同步注解。@EnableAsync
- 2.设置异步执行。@Async
# 总结:
- 1.通过@enableScheduling注解开启定时任务
- 2.通过@Scheduled设置定时任务
- corn表达式
# # 通用表达式:
- ,-*/
# # 专用表法式:
- ?
# 异步
- @enableAsync开启异步执行。
- @Async设置异步执行的方法。