IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 定时任务 @Scheduled注解的学习 -> 正文阅读

[Java知识库]定时任务 @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 * * * * ?
zonecron表达式解析使用的时区,默认为服务器的本地时区,使用java.util.TimeZone#getTimeZone(String)方法解析GMT-8:00
fixedDelay上一次任务执行结束到下一次执行开始的间隔时间,单位为ms1000
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 :这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-17 21:56:42  更:2022-03-17 21:58:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:17:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码