定时任务 @Scheduled注解的学习
定时任务 @Scheduled注解的学习
Spring中提供了@Scheduled
注解,目的是为了方便进行定时任务的开发。
要使用@Scheduled注解,首先需要在启动类添加@EnableScheduling
,启用Spring的计划任务执行功能,这样可以在容器中的任何Spring管理的bean上检测Scheduled
注解,执行计划任务。
@EnableScheduling 在配置类上使用,开启计划任务的支持(类上)
@Scheduled 来声明这是一个任务,包括cron,fixDelay,fixRate等类型(方法上,需先开启计划任务的支持)
注解源码:
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(Schedules.class)
public @interface Scheduled {String CRON_DISABLED = "-";String cron() default "";String zone() default "";long fixedDelay() default -1L;String fixedDelayString() default "";long fixedRate() default -1L;String fixedRateString() default "";long initialDelay() default -1L;String initialDelayString() default "";}
参数说明:
参数 | 参数说明 | 示例 |
---|---|---|
cron | 任务执行的cron表达式 | 0/1 * * * * ? |
zone | cron表达式解析使用的时区,默认为服务器的本地时区,使用java.util.TimeZone#getTimeZone(String)方法解析 | GMT-8:00 |
fixedDelay | 上一次任务执行结束到下一次执行开始的间隔时间,单位为ms | 1000 |
fixedDelayString | 上一次任务执行结束到下一次执行开始的间隔时间,使用java.time.Duration#parse解析 | PT15M |
fixedRate | 以固定间隔执行任务,即上一次任务执行开始到下一次执行开始的间隔时间,单位为ms,若在调度任务执行时,上一次任务还未执行完毕,会加入worker队列,等待上一次执行完成后立即执行下一次任务 | 2000 |
fixedRateString | 与fixedRate逻辑一致,只是使用java.time.Duration#parse解析 | PT15M |
initialDelay | 首先任务执行的延迟时间 | 1000 |
initialDelayString | 首次任务执行的延迟时间,使用java.time.Duration#parse解析 | PT15M |
fixedRate 是配置上一次任务执行开始到下一次执行开始的时间间隔,不会等待上一次任务执行完成就会调度下一次任务,将其放入等待队列中。
fixedDelay是配置的上一次任务执行结束到下一次执行开始的间隔时间,也就是说会等待上一次任务执行结束后,延迟间隔时间,再执行下一次任务。
一些定时例子
cron 表达式格式:
{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}# 每隔5秒执行一次
@Scheduled(cron = "*/5 * * * * ?")
# 每隔1分钟执行一次
@Scheduled(cron = "0 */1 * * * ?")
# 每天23点执行一次
@Scheduled(cron = "0 0 23 * * ?")
# 每天凌晨1点执行一次
@Scheduled(cron = "0 0 1 * * ?")
# 每月1号凌晨1点执行一次
@Scheduled(cron = "0 0 1 1 * ?")
# 每月最后一天23点执行一次;
@Scheduled(cron = "0 0 23 L * ?")
# 每周星期天凌晨1点执行一次
@Scheduled(cron = "0 0 1 ? * L")
# 在26分、29分、33分执行一次
@Scheduled(cron = "0 26,29,33 * * * ?")
# 每天的0点、13点、18点、21点都执行一次
@Scheduled(crom = "0 0 0,13,18,21 * * ?")
cron 表达式
cron 表达式由7个部分组成,各部分用空格隔开,cron 表达式的7个部分从左到右代表的含义如下:
秒 分 时 日 月 周 (年)
其中,年是可选的。
字段名 | 允许的值 | 允许的特殊字符 |
---|---|---|
秒 | 0-59 | , - * / |
分 | 0-59 | , - * / |
时 | 0-23 | , - * / |
日 | 1-31 | , - * ? / L W C |
月 | 1-12 or JAN-DEC | , - * / |
周 | 1-7 or SUN-SAT | , - * ? / L C # |
年(可选字段) | empty,1970-2099 | , - * / |
特殊字符说明
- , :表示列出枚举值,例如在 分 使用5,20,则意味着在5和20分 每分钟触发一次。
- - :表示范围。例如在 分 使用5-20,表示从5分到20分钟每分钟触发一次。
- ***** :表示匹配该域的任意值。假如在分域使用*,即表示每分钟都会触发事件。
- / :表示起始时间开始触发,然后每隔固定时间触发一次,例如在分域使用5/20,则意味着5分钟触发一次,而25,45等分别触发一次。
- ? :只能用在周和日。它也匹配域的任意值,但是实际不会,因为周和日会相互影响。例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法:13 13 15 20 * ?,其中最后一位只能用?,而不能使用*,如果使用 *表示不管星期几都会触发,实际上并不是这样。
- L :表示最后,只能出现日和周,如果在 日 使用 5L,意味着在最后的一个星期四触发。
- W :表示有效工作日(周一到周五),只能出现在周域,系统将在离指定日期的最近的有效工作日除法事件。例如:在 日 使用 5W,如果5日是星期六,则将在最近的工作日:星期五,即4日触发。如果5日是星期天,则在6日触发;如果5日在星期一到星期五中的一天,则就在5日触发。另外一点,W的最近寻找不会跨过月份。
- # :用于确定每个月第几个星期几,只能出现在周。例如在4#2,表示某月的第二个星期三。
- LW :这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。
定时任务 @Scheduled注解的学习相关推荐
- Spring定时任务@Scheduled注解使用配置方式(cron表达式、fixedRate和fixedDelay)
Spring定时任务@Scheduled注解使用配置方式(cron表达式.fixedRate和fixedDelay) 序言: 个人推荐一个很方便的在线Cron生成器(网页版):https://qqe2 ...
- SpringBoot定时任务@Scheduled注解详解
SpringBoot定时任务@Scheduled注解详解 项目开发中,经常会遇到定时任务的场景,Spring提供了@Scheduled注解,方便进行定时任务的开发 概述 要使用@Scheduled注解 ...
- spring源码分析之定时任务Scheduled注解
1. @Scheduled 可以将一个方法标识为可定时执行的.但必须指明cron(),fixedDelay(),或者fixedRate()属性. 注解的方法必须是无输入参数并返回空类型void的. @ ...
- 定时任务——@Scheduled注解做定时任务
一.这是springboot中配置静态定时任务的注解 1. 在启动类上面加上 @EnableScheduling 注解开启定时任务 import org.springframework.boot.Sp ...
- Spring定时任务@Scheduled注解使用方式浅窥(cron表达式、fixedRate和fixedDelay)
1.开篇 spring的@Scheduled定时任务相信大家都是十分熟悉.最近在使用过程中发现了一些问题,写篇文章,和大家分享一下.结论在最后,不想看冗长过程的小伙伴可以直接拉到最后看结论. 2.简单 ...
- spring定时任务@Scheduled注解详解
1.@Scheduled注解 常见参数: 1.fixedRate参数,传入一个时间间隔,单位是毫秒,这里是指每5s执行一次 @Scheduled(fixedRate = 5000)public voi ...
- spring自定义定时任务- @Scheduled注解
之前设置定时任务都是设置的固定数量的, 如果想动态的添加定时任务无法实现, 所以现在自己手动依赖Spring ,完成了一个定时任务的管理功能. 新建一个定时任务的配置类, 从数据库中读取配置的定时任务 ...
- Spring定时任务@scheduled多线程的使用(@Async注解)
1.开篇 在Spring定时任务@Scheduled注解使用方式浅窥这篇文章里面提及过,spring的定时任务默认是单线程的,他在某些场景下会造成堵塞,那么如果我们想让每一个任务都起一条线程去执行呢? ...
- scheduled每天下午1点执行一次_在Spring Boot项目中使用@Scheduled注解实现定时任务...
在java开发中定时任务的实现有多种方式,jdk有自己的定时任务实现方式,很多框架也有定时任务的实现方式.这里,我介绍一种很简单的实现方式,在Spring Boot项目中使用两个注解即可实现. 在sp ...
最新文章
- winform chart 添加数据报错_C# win Form开发 构造指定格式数据表字段值
- Mongodb部署及使用
- 查看网关物理地址命令
- java泛型循环break continue_循环结构练习(示例代码)
- Redis客户端命令行redis-cli操作
- 目标检测系列(五)——Faster R-CNN译文
- 【Microstation】第三章:Microstation三维模型构建与编辑
- centos mount 用法_linux screen的用法 - mouseleo
- cropper基本用法
- Squeeze Net
- 清华、北大、浙大的计算机课程资源集都在这里
- python dataframe的某一列变为list_Pandas某一列是列表,怎么展开呢?
- iOS系统什么天气app可以访问锁屏?
- Unity 圆形图片实现
- 装饰者模式、代理模式与AOP
- 在win10中加载ISO文件到虚拟光驱
- 这家公司,打造电竞三冠王SKT,无视法律,韩国总统还得给他赔笑脸
- 根据NSDate得到农历的年份(包括生肖) 、月、日。
- Google Open Images Dataset V4
- 应用程序.f/q(f了个墙)
热门文章
- 给pushButton加图片
- 浅浅仿制一个APP首页
- 操作系统练习题(三四五章)
- python制作冰花_【科学小实验】23.冻冰花
- SpringBoot——Bean管理
- XP系统下,如何设置成开机直接登陆,不用输入密码
- 基本webpack.config.js配置和packag.json配置
- excel求平均值AVERAGE出现#DIV/0!
- mysql least用法_mysql least函数
- linux跟踪内存检测原理,wooyun/Linux下基于内存分析的Rootkit检测方法.html at master · exitmsconfig/wooyun · GitHub...