Spring_使用Scheduled注解实现定时任务
使用Scheduled注解实现定时任务
启动类上要一定要加@EnableScheduling
1.创建定时器
1 |
|
2.了解cron表达式
一个cron表达式可以有6个元素或者7个元素组成(“年”这个元素可以省略,省略之后就是默认“每一年”)
例如上述例子中 ”0/30 * * * * ?”
2.1从左到右的参数分别是
- 秒(0~59) 例如0/5表示每5秒
- 分(0~59)
- 时(0~23)
- 日(0~31)的某天,需计算
- 月(0~11)
- 周几( 可填1-7 或 SUN/MON/TUE/WED/THU/FRI/SAT,其中周日SUM是1)
- 年(1970-2099)
2.2两个常用的符号
- “/”字符用来指定数值的增量
例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟
在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样 - “?”字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值
当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”
2.3常见的案例
”0 0 10,14,16 * * ?” 每天上午10点,下午2点,4点
“0 0/45 9-17 * * ?” 朝九晚五工作时间内每45分钟
“0 0 12 ? * WED” 表示每个星期三中午12点
“0 0 12 * * ?” 每天中午12点触发
“0 15 10 ? * *” 每天上午10:15触发(这个和下一个案例说明,必须”月份中的日期”和”星期”中有一个设置为“?”)
“0 15 10 * * ?” 每天上午10:15触发
3.具体案例
现在需要让用户输入一个时间参数{time}
自动让{time}天以内没有进行更新的数据自动删除
解题思路:每天凌晨0点更新,获取当前时间减去30天的时间 thirtyDaysAgo。将数据库中最后一次更新时间晚于 thirtyDaysAgo的数据删除掉即可。
1 | import org.springframework.scheduling.annotation.Scheduled; |
因为cron表达式生效需要重启服务器,所以不建议动态修改cron表达式
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Jackson Zhang!
评论
ValineDisqus