【定时调度】- 01 quartz的基础你真的了解吗
Quartz一款功能丰富、历史悠久,完全基于Java实现的开源任务调度框架,Java调度领域知名度非常高。其简...
2023-03-24Quartz
一款功能丰富、历史悠久,完全基于Java实现的开源任务调度框架,Java调度领域知名度非常高。其简单易用、稳定可靠的特性,使其被很多第三方应用将其当成调度框架基础依赖,如spring boot
已内置集成quartz
,elastic-job
调度框架则将quartz
作为其底层基础实现进行封装,xxl-job
曾经历史版本也是集成quartz
作为其触发实现机制基础,不过在最新版本采用时间轮实现已将quartz
移除。
(资料图)
使用quartz api
时,最核心三件套如下:
SchedulerFactory
和Scheduler
从名称就很容易识别这里采用工厂设计模式,Scheduler
是quartz
暴露出来供开发使用的一个最重要组件,从开发者视角来看它就是quartz
的门面,对quartz
的各种操作都是通过Scheduler
进行串联,类似于quartz
的大管家、代言人角色。
“这种设计模式在开源框架中很常见,比如
mybatis
中SqlSessionFactory
和SqlSession
,通过给开发者提供大管家组件,通过一个组件串联起所有核心功能,简化了开发人员上手框架难度。
一般一个应用只会对应一个Scheduler
实例,不同Scheduler
实例之间通过schedulerName
进行隔离,所有的quartz
数据库表设计中都有sched_name
这一列字段,这样Scheduler处理任务时只会操作数据库表中对应schedulerName
下的数据。quartz
集群就是利用多个Scheduler
实例配置相同schedulerName
名称,实现多机器同时处理同一个schedulerName
下任务来达到集群效果。
“
schedulerName
可以通过org.quartz.scheduler.instanceName
进行配置,默认名称为QuartzScheduler
。
Scheduler
操作的主要是JobDetail
和Trigger
两个组件,JobDetail
封装的是任务配置信息,而Trigger
触发器封装了任务触发信息,它们是1:N
关系,即一个JobDetail
可以关联多个Trigger
触发器,但是一个Trigger
触发器只能绑定到一个Job上。
JobDetail
组件封装了quartz
调度任务定义信息,下面是JobDetail
组件常规使用方式如下:
// JobDataMap实现Map接口,任务调度时存储到JobExecuteContext中,可以传递给Job实例JobDataMap jobDataMap = new JobDataMap();jobDataMap.put("name", "zhangsan");jobDataMap.put("time", System.currentTimeMillis());JobDetail jobDetail = JobBuilder // 绑定任务类 .newJob(QuartzCronJob.class) .storeDurably() // job对应ID .withIdentity("job2", "DEFAULT") .usingJobData(jobDataMap) .build();JobKey jobKey = jobDetail.getKey();if (scheduler.checkExists(jobKey)) { log.warn("调度任务已存在,删除后重新添加:{}", jobKey); scheduler.interrupt(jobKey);//停止JOB /** * deleteJob操作在删除Job之前,会执行unscheduleJob()取消job和trigger关联 */ scheduler.deleteJob(jobKey);}// 将JobDetail任务定义信息插入quartz表scheduler.addJob(jobDetail, true);
JobDetail
操作比较简单,主要有两点需要注意:1、newJob(Class extends Job> jobClass)
操作绑定任务类,任务类就是封装用户业务逻辑类;2、withIdentity(String name, String group)
给该任务设置一个身份ID,后续可以通过该身份ID进行管理,为方便灵活管理quartz
抽象出group
概念,这样可以批量对一组作业进行批量操作,身份ID使用JobKey
进行封装。
使用Scheduler
类addJob(JobDetail jobDetail, boolean replace)
方法就将创建的Job
定义信息添加到quartz
中,一般采用数据库持久化模式,即这里就会将Job
定义信息插入到qrtz_job_details
表中(见下图)。
下面来看下几个关键字段:
sched_name:上面说过,用来关联对应的Scheduler实例is_durable:是否持久化is_nonconcurrent:是否允许同一个作业可以同时多个实例执行,比如一个任务间隔1秒,但其执行时间为2秒,通过该属性控制是否允许同一个作业有多个任务同时允许,参见@DisallowConcurrentExecutionis_update_data: 任务已经执行中,是否允许更新JobDataMap持久化信息,参见@PersistJobDataAfterExecutionrequests_recovery: 故障恢复使用,具体参见后续源码分析job_data:JobDataMap序列化后存储到字段中
任务定义完成,但是任务按照怎么周期性规则进行触发执行,这就要看Trigger
触发器的脸色了
Trigger
组件常规使用方式如下:
JobDataMap jobDataMap = new JobDataMap();jobDataMap.put("name", "lisi");jobDataMap.put("address", "China");Trigger trigger = TriggerBuilder .newTrigger() .withIdentity("trigger1", "DEFAULT") .usingJobData(jobDataMap) .startAt(new Date()) .endAt(new Date(System.currentTimeMillis()+38 * 60 * 1000)) .withSchedule(CronScheduleBuilder.cronSchedule("*/10 * * * * ?")) .forJob(new JobKey("job1", "DEFAULT")) .build();//时间TriggerKey triggerKey = trigger.getKey();if(scheduler.checkExists(triggerKey)){ scheduler.unscheduleJob(triggerKey);}//必须绑定jobscheduler.scheduleJob(trigger);
和JobDetail
类似,主要有两点需要注意:1、同withIdentity(String name, String group)
,同理给该触发器设置一个身份ID,对应TriggerKey
;2、startAt()
、endAt()
对应启止时间;3、withSchedule(CronScheduleBuilder.cronSchedule("*/10 * * * * ?"))
;4、forJob(JobKey keyOfJobToFire)
将Trigger
与Job
进行关联,这样才知道触发哪个任务。
最后通过Scheduler
类scheduleJob(Trigger trigger)
方法就将创建的Trigger
定义信息添加到quartz
中,一般采用数据库持久化模式,即这里就会将Trigger
定义信息插入到触发器相关表中,示例中使用cron
触发器,则插入到qrtz_cron_triggers
表中(见下图)。
下面我们就来看下任务是咋个触发的。Scheduler
类scheduleJob(Trigger trigger)
将触发器持久化后,你会发现qrtz_cron_triggers
中没有起止时间以及和Job
绑定内容,所以,接下来我们看一张非常重要表:qrtz_triggers
。scheduleJob()
方法在持久化Trigger
信息后会同时向qrtz_triggers
表插入一条记录(见下图):
qrtz_job_details
和qrtz_cron_triggers
可以看成静态表,那qrtz_triggers
就是运行动态表,保存着任务运行期间数据,且随着运行记录在动态变更,是quartz
调度任务运行最重要的一张表,下面我们来看下这张表中几个关键字段:
start_time、end_time: trigger定义时设置的起止时间next_fire_time: 下次触发时间戳prev_fire_time: 上次触发时间戳trigger_state: trigger状态,最常见状态WAITING、ACQUIRED和EXECUTING,分别对应等待(下次触发时间还早) -> 加载到内存中等待(下次触发时间快到了) --> 执行(下次触发时间到了,需要触发任务),具体参见后续源码分析misfire_instr: trigger触发时间过期处理策略,比如本来是10:23:50时间点进行触发,但是由于某些原因在10:23:53秒才检索出来,这是该触发时间点已经过期,misfire_instr就是控制采用什么策略处理该过期任务,是直接丢弃重新计算下次触发时间点、还是一定时间范围内过期的理解执行等等,具体参见后续源码分析job_data: 和JobDetail一样,Trigger也可绑定一个JobDataMap,用于向Job实例传递参数,该字段就是存储Trigger关联的JobDataMap序列化内容
quartz
基本上就是围绕qrtz_triggers
中这几个关键字段实现任务触发,我们连蒙带猜大致可以想出quartz
任务调度触发机制粗略流程:
1、通过配置的trigger
触发器,计算出下次触发时间,更新到next_fire_time
字段,同时更新trigger_state
状态为WAITING
;
2、quartz
线程扫描该表,从表中查询出未来很短一段时间将要触发的记录(比对next_fire_time
和当前时间)放入到内存排队队列中,然后将trigger_state
更新成ACQUIRED
;
3、然后阻塞直到内存排队队列中触发任务到时间点,再触发任务之前,重新计算下次触发时间点,更新到next_fire_time
,同时将trigger_state
更新为WAITING
,然后执行当前任务;
4、由于next_fire_time
和trigger_state
值更新,重新开始步骤1,就这样循环往复触发下去。
这节从一个使用者角度简单分析quartz
核心运行机制,由于只是简单的从外层而未深入剖析源码,只是简单结合数据库表信息对quartz
大致的运行机制做个简单猜想,一些重要属性也没展开,带着这些疑问下一节通过源码分析找到真实的答案,一步步加深对quartz
运行机制的理解。
标签:
Quartz一款功能丰富、历史悠久,完全基于Java实现的开源任务调度框架,Java调度领域知名度非常高。其简...
2023-03-243月23日,美国证券交易委员会(SEC)宣布对孙宇晨及其三家全资公司提起诉讼,指出孙宇晨未经注册提供和销...
2023-03-23本周多家媒体报道,电池级碳酸锂跌破30万元 吨,但是其采用的多为第三方机构统计的市场均价,较市场一...
2023-03-231、 作为一名默默奉献的教育工作者,总不可避免地需要编写教案,借助教案可以提高教学质量,收到预期...
2023-03-23“这是不正常的”:德媒称英国人工资15年停滞不前,贝尔,德国,英国,工资,德媒,基金会,经济学家,价格因素
2023-03-23湖南移动网上营业厅话费查询:1、登录网上营业厅。2、输入手机号码,选择登录模式。3、输入密码、验证码...
2023-03-23为统筹部署铜陵理工学校2023年秋季招生工作,深入贯彻关于做好全国普通高等学校毕业生就业创业工作的会...
2023-03-23北京时间3月23日消息,浙江稠州篮球俱乐部发布官方消息表示,俱乐部原计划签约的第三外援-尼古拉斯-拉科...
2023-03-23本文目录一览:1、秦始皇朝1 05(无BUG版本)隐藏英雄密码和攻略(不要网址)拜托各位了3Q2、
2023-03-23据社保网小编了解,目前生育保险已经和职工基本医疗保险合并,也就是说,在单位缴纳了职工社保的人都是...
2023-03-23大家好,小太来为大家解答以上问题。媒体评211毕业生收破烂月入过万很多人还不知道,现在让我们一起来看...
2023-03-23京源环保公司董事、董事会秘书兼副总经理苏海娟与董事兼副总经理季献华于3月13日接待中信证券(600030)、...
2023-03-23韩国网络游戏公司NEOPLE。《地下城与勇士》是一款韩国网络游戏公司NEOPLE开发的免费角色扮演2D游戏,由...
2023-03-23这篇来自前段时间的一个读者咨询,聊完后对方很有启发,我也在这次沟通中理顺了一些对品牌的思考。征得...
2023-03-23近日,陕西证监局网站发布了关于对延安必康制药股份有限公司、韩某采取出具警示函措施的决定。延安必康...
2023-03-231、性质不同。2、定语:定语是用来修饰、限定、说明名词或代词的品质与特征的。3、状语:状语(adverbial,简称ad
2023-03-2305月08日黄山前往锡林郭勒出行防疫政策查询-从黄山出发到锡林郭勒的防疫政策(数据来源:本地宝)1、出...
2023-03-221、唐山大地震震级:里氏震级7 8级,矩震级7 5级。2、唐山大地震指中国河北省唐山市发生的地震,根据...
2023-03-22跳舞的夏天新区叫什么?很多人还不知道,现在让我们一起来看看吧!1、6月28除了两个大区电信的叫一米阳...
2023-03-223月20日零时,2022-2023年采暖季正式落下帷幕。为落实市委、市政府“项目突破年”工作部署,济南能源集...
2023-03-221,星际zerg怎么玩强zerg偷人口 zerg农民造建筑可以减去一人口,再造一农民然后取消建筑,可以超出人...
2023-03-22全面注册制落地后,主板IPO企业已陆续平移至交易所受理。近期,毛戈平化妆品股份有限公司(以下简称“毛...
2023-03-22中国包车和旅游服务提供商微巴士近日披露IPO条款,该公司计划发行400万股普通股,发行价在4美元至6美元...
2023-03-222023年郑州银基乐海水世界招聘公告2023年郑州引进乐海水世界招聘,正式工、暑假工同步招聘,老员工可免...
2023-03-22老凤祥黄金价格今天多少一克(2023年03月22日)每日更新
2023-03-223月21日,美吉姆(002621)融资买入339 02万元,融资偿还624 31万元,融资净卖出285 29万元,融资余额8250 27万元。
2023-03-22东吴证券研报指出,虚拟电厂是一种先进的区域性电能集中管理模式,功能在于聚合多分布式能源参与电力市...
2023-03-22热门中概股多数上涨小鹏汽车涨超8%:电,热门中概股多数上涨,小鹏汽车涨超8%,蔚来涨超5%,富途控股、...
2023-03-22本报北京3月20日电 (记者杨昊)记者从共青团中央获悉:第十三届“挑战杯”中国大学生创业计划竞赛19...
2023-03-21证券时报数据宝统计,友邦保险在港交所公告显示,3月21日以每股77 150港元至78 200港元的价格回购170...
2023-03-21北京时间3月21日,国内领先的互联网医美医疗服务平台新氧科技(纳斯达克股票代码:SY)(以下简称“新氧...
2023-03-2136氪获悉,力量钻石公告称,公司计划使用自有资金或自筹资金以集中竞价交易方式回购公司部分社会公众股...
2023-03-21全力推动消费市场加速回暖
2023-03-21全明星之后,湖人三分率35 4%、场均11 6球;全明星之前,湖人三分率33 7%、场均10 4球;通过对比数...
2023-03-21【案例简介】十三岁女孩女右手静脉畸形,经过硬化治疗后,疼痛症状明显缓解。门诊来了一位十三岁的小姑...
2023-03-21一项新的苹果专利获得批准,该专利显示,iPhone iPad配备柔性屏幕可在掉落时自动折叠,从而减少屏幕损...
2023-03-213月19日凌晨02时36分,杭州市消防救援支队接到报警:上塘高架北往南大关上口处一辆面包车着火。接警后,...
2023-03-211、楼上这位仁兄,澳门科大口碑确实不怎么好吧。2、我在香港这边也有所耳闻。3、比不上其他的澳门公立院...
2023-03-20拉卡拉(300773 SZ)发布公告,公司于近日收到公司股东孙浩然先生出具的《关于股份减持超过1%的告知函》...
2023-03-20家庭年收入10万元以下(含10万元)或个人年收入5万元以下(含5万元),并符合下列条件之一的,可申请成都市...
2023-03-203年2800万!加盟湖人得到机会,爆发崛起,这4换1交易果然很成功,湖人,火箭队,比斯利,勇士队,奥兰多魔术,...
2023-03-201、方法 步骤分步阅读1 5打开复印机上盖,将正面向下,反面向上,放到扫描面板偏右的位置。2、如下图...
2023-03-20特朗普发文鼓动国会山骚乱会重演?今天的热度非常高,现在也是在热搜榜上了,那么具体的特朗普发文鼓动...
2023-03-20业内预测,到2050年,我国低碳经济行业发展优势将持续凸显,绿色低碳累计投资需求将达487万亿元,催生更...
2023-03-201、那个很有用的,现代社会污染很重,半个月用次清洁膏 霜可以帮你深层清洁毛孔。2、如果毛孔堵着,那么...
2023-03-20在中心城区规划建设用地范围外征收农民集体所有的土地,征收补偿的相关费用:1、土地补偿费和安置补助费...
2023-03-20苹果2018年春季发布会时间春季发布会将于3月27号在芝加哥的LaneTechCollegePrepHi
2023-03-19胶济客专临淄客运车场信号系统升级完成
2023-03-19《国际标准楼宇清洁》系列课程向你介绍清洁学科的知识体系,欧美楼宇清洁的行业标准。结合国内楼宇清洁...
2023-03-19盟外5家企业授权使用!锡盟制定发布12项传统奶制品团体标准
2023-03-19[腕表之家钟表杂谈]不知道大家有没有一种感觉,每次提到天梭超级玩家系列,脑海中总是出现游戏、竞技、...
2023-03-19□本报通讯员陶然开发商逾期交房,业主是否一律可以要求解约?江西省南昌市西湖人民法院近日判决一起房...
2023-03-191、在网上观看吧。2、copy微笑就是花朵微笑就是阳光微笑的季节到处鸟语花香微笑就是天空微笑就是海洋微...
2023-03-18宠物征途怎么下载?想要比别人更加抢先抢快的玩到这款游戏,那么你获取游戏开测消息是关键,能够获取到...
2023-03-181、百度百科里面有一种缩分方法。2、其操作方法是先将圆锥形试样堆用一块薄板插入锥顶,使矿样沿圆周分...
2023-03-18阳信县办成全市首例“远程勘验+电子签章”业务
2023-03-18天津北方网讯:天津新松智能科技位于宝坻区京津中关村科技城,新开通的高铁让销售人员张洪宝在今年2月份...
2023-03-181、从钢筋屈服到混凝土被压碎截面不断绕中和轴转动类似于一个铰由于此铰是在截面发生明显的塑性形变后形...
2023-03-181、数控坐标镗床主要用于机械制造业和其他工业部门加工高精度零件上的孔系及轮廓铣削。2、在数控坐标镗...
2023-03-173月16日,康方生物发布2022年财报,报告期内公司实现营业收入8 38亿元,同比增加271 26%;公司年内亏...
2023-03-173月17日,嘉必优发布业绩快报,公司2022年1-12月实现营业收入4 33亿元,同比增长23 44%,归属于上市公...
2023-03-17截至2023年3月17日收盘,久远银海(002777)报收于21 51元,下跌1 92%,换手率11 04%,成交量44 04万手,成交额9 57亿元。
2023-03-171、安徽美天美控股有限公司于2019年12月19日成立。2、法定代表人胡小飞,公司经营范围包括:股权投资;...
2023-03-17当好引路人,一起向未来,郑州市第六十四中学迎接师德师风建设检查
2023-03-17受短期资金关注,股价快速拉升,5分钟内上涨大于1%以上;资金流向数据,主力资金净流入356 28万元,占...
2023-03-17此诗为唐代铜官窑瓷器题诗,作者可能是陶工自己创作或当时流行的里巷歌谣。1974-1978年间出土于湖南长沙...
2023-03-171、大腿上戴着为了收纳咒矢用的皮带式箭套,如果是普通的内裤会成为阻碍而在穿或脱的时候会很麻烦,因此...
2023-03-17上述场景,可以简单抽象为曝光去重,就是用户看过的feeds1、feeds2、feeds3 等,如何保证在...
2023-03-16新华社兰州3月16日电(记者张新新、王铭禹)国家电网有限公司甘肃陇东至山东±800千伏特高压直流输电工...
2023-03-16瘦西湖夜游年票只限夜游开放时使用,期间为一年。购买成功后刷身份证入园。补充介绍:晚间夜游开放入口...
2023-03-1603月16日12时湖南张家界疫情数据阳了以后为什么会腰疼?应该怎么办?以下为详情!一、03月16日12时张家...
2023-03-16洞口县中小企业融资担保有限责任公司面向社会公开招聘公告:一、公司简介洞口县中小企业融资担保有限责...
2023-03-16今天小编肥嘟来为大家解答以上的问题。炭疽粉末是怎么得到的,炭疽粉相信很多小伙伴还不知道,现在让我们...
2023-03-16新华社北京3月15日电美国《纽约时报》14日披露硅谷银行突然被关闭内幕,认为这家银行过度聚焦技术行业创...
2023-03-166月1日起,我国将施行电信领域违法行为举报处理新规
2023-03-161、意思是说秋天的蝉,你不能和他谈论冬天的冰。2、井底之蛙,你不能和他谈论大海。3、就是说秋蝉,他没...
2023-03-161、黑箱,又称“黑盒”、“黑匣”,它不是日常生活中的木板箱、铁皮箱等实物。2、而是控制论中的一个概...
2023-03-15未来,美联储需要在“维持金融稳定”和“抗击通胀”间取得平衡,“两难”局面下,加息周期或进入尾声。
2023-03-15不少同学关心辽宁师范大学是什么档次的大学,以及辽宁师范大学是一本还是二本,想知道辽宁师范大学值不...
2023-03-15当我们来到温柔的春天,女朋友们的心情也如同天气一样变得越来越温暖,越来越有活力,但如今这个充满希...
2023-03-152023年03月15日临近13时21分,荣晟环保(603165)出现异动,股价大幅拉升10 04%。截至发稿,该股报14 ...
2023-03-151、首先要确认自己产生幻觉是什么样的原因,是因为精神压力还是药物;2、在前一种情况下,我们需要找到...
2023-03-15近日,比亚迪汽车西安工厂内,带有第50万辆标志的宋PLUSDM-i(参数|询价)缓缓驶出生产线。从上市到第50万辆下线
2023-03-151、收支的真实性、合法性和效益性这里的收支,在一级政府可以表现为财政收支,行政部门表现为经费收支,...
2023-03-15应用程序研究员JaneManchunWong(@wongmjane,在Twitter上)最新发布的另一款流行移动应用程序
2023-03-151、本经验介绍的是如何画小刀简笔画,希望能够帮助到学习画画的小朋友先将刀具前端部分画出来,注意控制...
2023-03-142014年,林瑞斌辞去高雄的工作来到海南协助父亲管理农场,主要是看中海南机会多、发展空间大,想来海南...
2023-03-141、带上飞机的行李的话,国内航班要求总重量不超过5公斤,国际航班不超过7公斤,每件行李的体积不超过20...
2023-03-141、山东商业职业技术学院山东商业职业技术学院是1999年经教育部批准设立的省属高职院校。2、学校具有悠...
2023-03-14两天后美帝又一千亿美元银行倒闭,伊朗表态助力中俄终结美帝霸权,存款,储户,贷款,耶伦,伊朗,保险公司,收...
2023-03-1440个品种被纳入,第八批国家药品集采本月开标
2023-03-143月13日,易方达科创板50ETF联接A最新单位净值为0 7806元,累计净值为0 7806元,较前一交易日上涨0 4...
2023-03-14电光科技3月13日公告,2022年,公司实现营业总收入13亿元,同比增长379%;归母净利润91726万元,同比增长94
2023-03-131、本教材是在贯彻落实教育部“高等教育面向21世纪教学内容和课程体系改革计划”的要求精神的基础上,按...
2023-03-13沪指3月13日上涨1 20%,申万所属行业中,今日上涨的有26个,涨幅居前的行业为计算机、通信,涨幅为3 8...
2023-03-131、保险小编帮您解答,更多疑问可在线答疑。2、一般情况下,担保公司的担保费(包含各种费用回)按银行...
2023-03-131、供应链金融是一种金融服务:银行围绕核心企业,管理上下游中小企业的资金流和物流,并把单个企业的不可
2023-03-13艾德韦宣集团(09919)早盘涨超5%,截至发稿,涨2 61%,报1 18港元,成交额26 58万港元。 消息面上...
2023-03-13欢迎观看本篇文章,小勉来为大家解答以上问题。豹纹t恤怎么搭配好看,如何搭配豹纹t恤很多人还不知道,...
2023-03-13一、瞥怎么读音的近义词1、暂无二、瞥怎么读音的反义词2、看[kàn]3、观[guān]4、视[shì]
2023-03-13Copyright © 2015-2022 热讯水产网版权所有 备案号:豫ICP备20005723号-6 联系邮箱:29 59 11 57 8@qq.com