| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Spring @scheduled注解周期性执行超时任务对任务调度的影响分析 -> 正文阅读 |
|
[Java知识库]Spring @scheduled注解周期性执行超时任务对任务调度的影响分析 |
本文测试了@scheduled注解中参数cron,fixedDelay,fixedRate参数周期性调度任务时,任务执行时长不同对任务调度的影响情况,包含作业任务执行时长小于任务执行周期,作业任务执行时长与任务执行频率同频,作业任务执行时长大于任务执行周期的三种情况,用于对实际业务设置定时执行作为参考。 第一种.cron参数周期性执行不同时长业务分析情况1:调度周期大于任务执行时长情况模拟定时周期为3秒执行一次,任务执行耗时1秒,执行结果如图所示:第一次作业开始时间为16:25:36,结束时间为16:25:37,第二次作业开始时间为:16:25:39,结束时间为16:25:40,第三次作业开始时间为16:25:43。由执行结果可知:作业调度依次间隔为3秒钟时间执行一次,符合预期。
情况2:调度周期与任务执行时长相同的情况模拟定时周期为3秒执行一次,任务执行耗时3秒,执行结果如图所示:第一次作业开始时间为16:31:48,结束时间为16:31:51,第二次作业开始时间为:16:31:54,结束时间为16:31:57,第三次作业开始时间为16:32:00。由执行结果可知:作业调度间隔已经不是3秒钟时间执行一次(作业完后3秒执行下一次调度),不符合预期。
情况3:调度周期小于任务执行时长的情况模拟定时周期为3秒执行一次,任务执行耗时5秒,执行结果如图所示:第一次作业开始时间为16:33:24,结束时间为16:33:29,第二次作业开始时间为:16:33:30,结束时间为16:33:35,第三次作业开始时间为16:33:36。由执行结果可知:任务调度间隔不为3秒钟时间执行一次(作业完后隔1秒钟执行下一次调度),不符合预期。
第二种.fixedRate参数周期性执行不同时长业务分析情况1:调度周期大于任务执行时长情况模拟定时周期为3秒执行一次,任务执行耗时1秒,执行结果如图所示:第一次作业开始时间为16:35:45,结束时间为16:35:46,第二次作业开始时间为:16:35:48,结束时间为16:35:49,第三次作业开始时间为16:35:51。由执行结果可知:作业调度依次间隔为3秒钟时间执行一次,符合预期。
情况2:调度周期与任务执行时长相同的情况模拟定时周期为3秒执行一次,任务执行耗时3秒,执行结果如图所示:第一次作业开始时间为16:37:20,结束时间为16:37:23,第二次作业开始时间为:16:37:23,结束时间为16:37:26,第三次作业开始时间为16:37:26。由执行结果可知:作业调度间隔3秒钟时间执行一次(作业完后立即执行下一次调度),符合预期。
情况3:调度周期小于任务执行时长的情况模拟定时周期为3秒执行一次,任务执行耗时5秒,执行结果如图所示:第一次作业开始时间为16:39:52,结束时间为16:39:57,第二次作业开始时间为:16:39:57,结束时间为16:40:02,第三次作业开始时间为16:40:02。由执行结果可知:任务调度间隔不为3秒钟时间执行一次(作业完后立即执行下一次调度,调度间隔由任务执行时长决定),不符合预期。
第三种.fixedDelay参数周期性执行不同时长业务分析情况1:调度周期大于任务执行时长情况模拟定时周期为3秒执行一次,任务执行耗时1秒,执行结果如图所示:第一次作业开始时间为16:42:32,结束时间为16:42:33,第二次作业开始时间为:16:42:36,结束时间为16:42:37,第三次作业开始时间为16:42:40。由执行结果可知:作业调度依次为执行结束后间隔3秒钟时间执行下一次任务,符合预期。
情况2:调度周期与任务执行时长相同的情况模拟定时周期为3秒执行一次,任务执行耗时3秒,执行结果如图所示:第一次作业开始时间为16:44:11,结束时间为16:44:14,第二次作业开始时间为:16:44:17,结束时间为16:44:20,第三次作业开始时间为16:44:23。由执行结果可知:作业调度依次为执行结束后间隔3秒钟时间执行下一次任务,符合预期。
情况3:调度周期小于任务执行时长的情况模拟定时周期为3秒执行一次,任务执行耗时5秒,执行结果如图所示:第一次作业开始时间为16:45:57,结束时间为16:46:02,第二次作业开始时间为:16:46:05,结束时间为16:46:10,第三次作业开始时间为16:46:13。由执行结果可知:作业调度依次为执行结束后间隔3秒钟时间执行下一次任务,符合预期。
@scheduled注解参数简介1.cron支持cron表达式方式进行作业调度。 2.zone将解析 cron 表达式的时区。默认情况下,此属性是空字符串(即将使用服务器的本地时区)。 3.fixedDelay上一次执行完毕时间点之后多长时间再执行。 4.fixedDelayString意思fixedDelay相同,只是使用字符串的形式。支持配置文件中配置参数,采用占位符获取配置参数的情形。 5.fixedRate上一次开始执行时间点之后多长时间再执行。 6.fixedRateString意思fixedRate相同,只是使用字符串的形式。支持配置文件中配置参数,采用占位符获取配置参数的情形。 7.initialDelay配合fixedDelay与fixedRate一起使用,在第一次执行任务之前延迟的毫秒数。 8.initialDelayString意思initialDelay相同,只是使用字符串的形式。支持配置文件中配置参数,采用占位符获取配置参数的情形 测试类方法测试类不包含包名,可自行导入,有兴趣的同学还可以观察一下线程ID,可以测试一下多个调度任务线程执行情况。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 | -2025/3/1 4:05:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |