
恢复
Quartz的故障恢复

iteye_19215
关注
0点赞·914人阅读
在默认的情况下,Quartz中所提交的任务都是独立的运行在内存中的线程,这意味着一旦机器出现故障或任何原因这个线程被干掉,那么提交的任务就无法继续也无法恢复。如果我们想要在系统出现故障的情况下恢复Quartz中的任务,就要把当前任务状态持久化,然后在系统恢复之后恢复任务的执行,这就是基本的解决思路。Quartz在这方面也提供了支持。
首先,持久化的问题。要进行恢复就要将任务进行的状态保存下来,Quartz内置了数据库持久化的模块,我们要做的只是在配置文件中增加数据源,并在数据库中手动建好表就可以了。在%Quartz_HOME%/docs/dbTables目录下有大部分数据的建表语句,可以直接拿到数据库中进行建表 *** 作。
Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。本文主要介绍 Quartz 的基本使用,文中使用到的软件及版本:Java 180_191、Quartz 232、SpringBoot 244、MySQL 57。
1、Quartz 核心概念
Job 表示一个工作,要执行的具体内容。
JobDetail 表示一个具体的可执行的调度程序,Job 是这个可执行程调度程序所要执行的内容,另外 JobDetail 还包含了这个任务调度的方案和策略。一个 JobDetail 可对应多个 Trigger。
Trigger 代表一个调度参数的配置,什么时候去调。一个 Trigger 对应 一个 JobDetail。
Scheduler 代表一个调度容器,一个调度容器中可以注册多个 JobDetail 和 Trigger。当 Trigger 与 JobDetail 组合,就可以被 Scheduler 容器调度了。
2、Quartz 常用配置
21、Quartz 主配置
1、orgquartzschedulerinstanceName scheduler 实例名称,默认值为 'QuartzScheduler'
2、orgquartzschedulerinstanceId scheduler实例Id,必须唯一;启用集群可设为 'AUTO',默认值为 'NON_CLUSTERED'
3、orgquartzschedulerthreadName 线程名称,默认值为 instanceName + '_QuartzSchedulerThread'
4、orgquartzschedulermakeSchedulerThreadDaemon 调度程序的主线程是否设为守护线程,默认值为 false
22、ThreadPool 配置
1、orgquartzthreadPoolclass ThreadPool实现的类名,默认值为 'orgquartzsimplSimpleThreadPool'
2、orgquartzthreadPoolthreadCount 线程数,默认值为 10
3、orgquartzthreadPoolthreadPriority 线程优先级,默认值 5
23、JobStore 配置
orgquartzjobStoreclass 任务存储实现类名,可设为 orgquartzsimplRAMJobStore、orgquartzimpljdbcjobstoreJobStoreTX(quartz管理事务)、orgquartzimpljdbcjobstoreJobStoreCMT(应用程序管理事务)、orgterracottaquartzTerracottaJobStore;当设置为jdbc存储时,有以下属性可以调整设置:
1、orgquartzjobStoredriverDelegateClass 驱动代理类,看设置为标准的 jdbc 驱动程序:orgquartzimpljdbcjobstoreStdJDBCDelegate
2、orgquartzjobStoredataSource 数据源名称
3、orgquartzjobStoretablePrefix JDBCJobStore的表前缀;如果使用不同的表前缀,则可以在同一数据库中拥有多组Quartz表;默认值 'QRTZ_'
4、orgquartzjobStoreuseProperties 指示JobDataMaps中的所有值都将是字符串,避免了将非String类序列化为BLOB时可能产生的类版本控制问题
5、orgquartzjobStoreisClustered 是否开启集群,如果有多个 Quartz 实例使用同一组数据库表,则此属性必须设置为 true,默认值为 false
6、orgquartzjobStoreclusterCheckinInterval 设置此实例检入与群集的其他实例的频率(以毫秒为单位),默认值为 15000
24、DataSource 配置
1、orgquartzdataSourceNAMEdriver JDBC 驱动程序
2、orgquartzdataSourceNAMEURL JDBC URL
3、orgquartzdataSourceNAMEuser 数据库用户名
4、orgquartzdataSourceNAMEpassword 数据库密码
5、orgquartzdataSourceNAMEmaxConnections 最大连接数,默认值 10
6、orgquartzdataSourceNAMEvalidationQuery 验证sql
7、orgquartzdataSourceNAMEidleConnectionValidationSeconds 空闲连接检测间隔,默认值 50
8、orgquartzdataSourceNAMEvalidateOnCheckout 获取连接后是否验证连接,默认值 false
9、orgquartzdataSourceNAMEdiscardIdleConnectionsSeconds 空闲连接多长时间后丢弃该连接,0 表示禁用该功能,默认值为 0。
或者使用容器提供的数据源:
1、orgquartzdataSourceNAMEjndiURL 数据源的 jndi
2、orgquartzdataSourceNAMEjavanamingsecurityprincipal jndi 需要的用户名
3、orgquartzdataSourceNAMEjavanamingsecuritycredentials jndi 需要的密码
3、Quartz JDBCJobStore表说明
1、quartz表达式介绍
Cron表达式的时间字段除允许设置数值外,还可使用一些特殊的字符,提供列表、范围、通配符等功能,细说如下:
(1)星号():可用在所有字段中,表示对应时间域的每一个时刻,例如,在分钟字段时,表示“每分钟”;
(2)问号():该字符只在日期和星期字段中使用,它通常指定为“无意义的值”,相当于点位符;
(3)减号(-):表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12;
(4)逗号(,):表达一个列表值,如在星期字段中使用“MON,WED,FRI”,则表示星期一,星期三和星期五;
(5)斜杠(/):x/y表达一个等步长序列,x为起始值,y为增量步长值。如在分钟字段中使用0/15,则表示为0,15,30和45秒,而5/15在分钟字段中表示5,20,35,50,你也可以使用/y,它等同于0/y;
2、QuartzNET是一个开源的作业调度框架,是 OpenSymphony 的 Quartz API 的NET移植,它用C#写成,可用于winform和aspnet应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等,比如:表示式: 0 0 12 ? 表示:每天的12点调用。
3、Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 232。
你的问题我想分两部分回答:
1quartz有数据库方式保存job,以及触发器这些数据的
具体可以看我的一篇blog:
quartz数据库方式与web工程整合
里面还有一个中文版的quartz的指南,可以帮你搞定数据库方式的quartz
2至于你说的1000个触发器,这么多的任务调度我没做过,不清楚结果会怎么样,这部分还需要再研究一下。
转载
quartz可以不适用数据库吗
QUARTZ任务不写入数据库
在使用quartz遇到了很诡异的bug,通过google及百度都没有找到解决方案,最后通过搭建quartz源码环境,发现问题所在。
最近接手一个系统的升级开发,系统中使用了quartz任务调度,在大部分的需求开发完毕后,对之前开发的部分功能模块进行测试及优化,当优化任务调度并进行测试,问题出现了,每当我添加定时任务时,任务添加成功且在到达定时时间后,任务会被执行,但是任务切没有写入数据库!!!
主要有三个核心概念:调度器、任务和触发器。
三者关系简单来说就是,调度器负责调度各个任务,到了某个时刻或者过了一定时间,触发器触动了,特定任务便启动执行。概念相对应的类和接口有:
1)JobDetail:望文生义就是描述任务的相关情况;
2)Trigger:描述出发Job执行的时间触发规则。有SimpleTrigger和CronTrigger两个子类代表两种方式,一种是每隔多少分钟小时执行,则用SimpleTrigger;另一种是日历相关的重复时间间隔,如每天凌晨,每周星期一运行的话,通过Cron表达式便可定义出复杂的调度方案。
3)Scheduler:代表一个Quartz的独立运行容器,Trigger和JobDetail要注册到Scheduler中才会生效,也就是让调度器知道有哪些触发器和任务,才能进行按规则进行调度任务。
以上就是关于quartz定时任务执行时系统故障错过了时间点后续会自动修复吗全部的内容,包括:quartz定时任务执行时系统故障错过了时间点后续会自动修复吗、quartz连接数、quartz表达式介绍 Quartz介绍等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)