quartz 表结构、配置文件、实现说明
一、表说明(建表,SQL语句在quartz-1.6.6\docs\dbTables文件夹中可以找到)
表名 | 说明 |
qrtz_calendars | 以 Blob 类型存储 Quartz 的 Calendar 信息 |
qrtz_cron_triggers | 存储 Cron Trigger,包括 Cron 表达式和时区信息 |
qrtz_fired_triggers | 存储与已触发的 Trigger 相关的状态信息,以及相联 Job 的执行信息 |
qrtz_paused_trigger_grps
|
存储已暂停的 Trigger 组的信息 |
qrtz_scheduler_state | 存储少量的有关调度器 (Scheduler) 的状态,和别的 调度器 (Scheduler)实例(假如是用于一个集群中) |
qrtz_locks | 存储程序的非观锁的信息(假如使用了悲观锁) |
qrtz_job_details | 存储每一个已配置的 Job 的详细信息(jobDetail) |
qrtz_job_listeners | 存储有关已配置的 Job 监听器 的信息 |
qrtz_simple_triggers | 存储简单的 Trigger,包括重复次数,间隔,以及已触的次数 |
qrtz_blog_triggers |
以 Blob 类型存储的Trigger (用于 Quartz 用户用 JDBC 创建他们自己定制的 Trigger 类型,JobStore 并不知道如何存储实例的时候) |
qrtz_trigger_listeners | 存储已配置的触发器监听器 ( Trigger Listener ) 的信息 |
qrtz_triggers | 存储已配置的 触发器 (Trigger) 的信息 |
二、表结构说明
表qrtz_job_details: 保存job详细信息,该表需要用户根据实际情况初始化
job_name:集群中job的名字,该名字用户自己可以随意定制,无强行要求
job_group:集群中job的所属组的名字,该名字用户自己随意定制,无强行要求
job_class_name:集群中个note job实现类的完全包名,quartz就是根据这个路径到classpath找到该job类
is_durable:是否持久化,把该属性设置为1,quartz会把job持久化到数据库中
job_data:一个blob字段,存放持久化job对象
表qrtz_triggers: 保存trigger信息
trigger_name: trigger的名字,该名字用户自己可以随意定制,无强行要求
trigger_group:trigger所属组的名字,该名字用户自己随意定制,无强行要求
job_name: qrtz_job_details表job_name的外键
job_group: qrtz_job_details表job_group的外键
trigger_state:当前trigger状态,( WAITING:等待 PAUSED:暂停ACQUIRED:正常执行 BLOCKED:阻塞 ERROR:错误。 当 (当设置为WAITING时JOB不触发)
trigger_type:触发器类型,CRON、SIMPLE
表qrtz_cron_triggers:存储cron表达式表
trigger_name: qrtz_triggers表trigger_name的外键
trigger_group: qrtz_triggers表trigger_group的外键
cron_expression:cron表达式
表qrtz_scheduler_state:存储集群中note实例信息,quartz会定时读取该表的信息判断集群中每个实例的当前状态
instance_name:之前配置文件中org.quartz.scheduler.instanceId配置的名字,就会写入该字段,如果设置为AUTO,quartz会根据物理机名和当前时间产生一个名字
last_checkin_time:上次检查时间
checkin_interval:检查间隔时间
三、quartz配置文件
Quartz提供两种基本作业存储类型
第一种类型叫做RAMJobStore:
最佳的性能,因为内存中数据访问最快
不足之处是缺乏数据的持久性,当程序路途停止或系统崩溃时,所有运行的信息都会丢失
第二种类型叫做JDBC作业存储:
通过调整其quartz.properties属性文件,持久化任务调度信息
使用数据库保存任务调度信息后,即使系统崩溃后重新启动,任务的调度信息将得到恢复
1、RAMJobStore配置
#设置调度器的实例名
org.quartz.scheduler.instanceName: vpnOpenScheduler
org.quartz.scheduler.rmi.export: false
org.quartz.scheduler.rmi.proxy: false
org.quartz.scheduler.wrapJobExecutionInUserTransaction: falseorg.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
# 指定多少个工作者线程被创建用来处理 Job
org.quartz.threadPool.threadCount: 10
# 设置工作者线程的优先级(最大值10,最小值1,常用值5)
org.quartz.threadPool.threadPriority: 5
# 加载任务代码的ClassLoader是否从外部继承
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: trueorg.quartz.jobStore.misfireThreshold: 60000# 默认配置,数据保存到内存(调度程序信息是存储在被分配给JVM的内存里面,运行速度快)
org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore
2、JDBC作业存储
#调度器的实例名(instanceName)
org.quartz.scheduler.instanceName = AIJobServerScheduler
#设置调度器的实例ID (instanceId)如果使用集群,instanceId必须唯一,设置成AUTO
org.quartz.scheduler.instanceId = AUTOorg.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 5#是否使用集群(如果项目只部署到 一台服务器,就不用了)
org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval = 20000 org.quartz.jobStore.misfireThreshold = 60000
# 持久化配置(存储方式使用JobStoreTX,也就是数据库)
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
# 驱动器方言 数据库平台
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate#数据库中quartz表的表名前缀
org.quartz.jobStore.tablePrefix = QRTZ_#============================================================================
# Configure Datasources配置数据源(可被覆盖,如果在schedulerFactoryBean指定数据源)
#============================================================================
org.quartz.dataSource.aiJobServer.driver = com.mysql.jdbc.Driver
org.quartz.dataSource.aiJobServer.URL = jdbc:mysql://XX.XX.XX.XX:XXXX/trunk?useUnicode=true&characterEncoding=utf8
org.quartz.dataSource.aiJobServer.user = rd
org.quartz.dataSource.aiJobServer.password = rd
org.quartz.dataSource.aiJobServer.maxConnections = 10
#数据库别名 随便取
org.quartz.jobStore.dataSource = aiJobServer
四、Java实现代码
/**
*初始化定时任务
*/
public class VpnMplsOpenInit {public static void init(){//启动日报、周报、月报定时任务//scheduler配置的路径.propertiesString myJobSchedulerPath = SpringContextUtils.getBean("vpnOpenQuartz").toString();String hourStrDay = 3String minStrDay = 0Integer hourDay = 0;Integer minDay = 0;String weekStrWeek = IPNetHelper.getConfigProperties("RESOURCE_STATISTICS_WEEK_WEEK");String hourStrWeek = IPNetHelper.getConfigProperties("RESOURCE_STATISTICS_WEEK_HOUR");String minStrWeek = IPNetHelper.getConfigProperties("RESOURCE_STATISTICS_WEEK_MIN");Integer week = 0;Integer hourWeek = 0;Integer minWeek = 0;String monthStrMonth = IPNetHelper.getConfigProperties("RESOURCE_STATISTICS_MONTH_MONTH");String hourStrMonth = IPNetHelper.getConfigProperties("RESOURCE_STATISTICS_MONTH_HOUR");String minStrMonth = IPNetHelper.getConfigProperties("RESOURCE_STATISTICS_MONTH_MIN");Integer month = 0;Integer hourMonth = 0;Integer minMonth = 0;//周报是否执行boolean falgMonth = true;try {//创建调度器SchedulerFactory sf = new StdSchedulerFactory(myJobSchedulerPath);Scheduler scheduler = sf.getScheduler();Date startDate = null;if(falgDay){log.info("资源统计创建日报定时任务开始");//创建日报quart的任务信息对象JobDetail myJobDay = newJob(ResourceStatisticsDayJob.class).withIdentity(ResourceStatisticsDayJob, ResourceStatisticsDayJob + "-JobGroup").build();//设置触发器Trigger triggerDay = newTrigger().withIdentity(ResourceStatisticsDayJob, ResourceStatisticsDayJob + "-TriggerGroup").withSchedule(dailyAtHourAndMinute(hourDay, minDay)).build();startDate = scheduler.scheduleJob(myJobDay, triggerDay);log.info("资源统计创建日报定时任务开始");}if(falgWeek){log.info("资源统计创建周报定时任务开始");//创建日报quart的任务信息对象JobDetail myJobWeek = newJob(ResourceStatisticsWeekJob.class).withIdentity(ResourceStatisticsWeekJob, ResourceStatisticsWeekJob + "-JobGroup").build();//设置触发器Trigger triggerWeek = newTrigger().withIdentity(ResourceStatisticsWeekJob, ResourceStatisticsWeekJob + "-TriggerGroup").withSchedule(weeklyOnDayAndHourAndMinute(week,hourWeek, minWeek)).build();startDate = scheduler.scheduleJob(myJobWeek, triggerWeek);log.info("资源统计创建周报定时任务开始");}if(falgMonth){log.info("资源统计创建月报定时任务开始");//创建日报quart的任务信息对象JobDetail myJobMonth = newJob(ResourceStatisticsMonthJob.class).withIdentity(CResourceStatisticsMonthJob, ResourceStatisticsMonthJob + "-JobGroup").build();//设置触发器Trigger triggerMonth = newTrigger().withIdentity(ResourceStatisticsMonthJob, ResourceStatisticsMonthJob + "-TriggerGroup").withSchedule(monthlyOnDayAndHourAndMinute(month,hourMonth, minMonth)).build();startDate = scheduler.scheduleJob(myJobMonth, triggerMonth);log.info("资源统计创建月报定时任务开始");}if(falgDay || falgWeek || falgMonth){scheduler.start();}log.info("资源统计日报、周报、月报任务启动成功,任务定时时间: " + startDate);} catch (SchedulerException e) {log.error("资源统计日报、周报、月报任务启动失败, 创建任务异常: ", e);}}
}/**
*具体定时任务实现类
*/
public class ResourceStatisticsDayJob implements org.quartz.Job {/*** 执行日报* */public void execute(JobExecutionContext context) throws JobExecutionException {IServiceInterfaceApplyRemainDayModifyService service = (IServiceInterfaceApplyRemainDayModifyService)SpringContextUtils.getBean("serviceInterfaceApplyRemainDayModifyServiceImpl");service.modifyRemainDay();}
}
quartz 表结构、配置文件、实现说明相关推荐
- 【quartz表结构及说明】
文章目录 一.quartz表信息 二.表字段说明 1.qrtz_blob_triggers 2.qrtz_calendars 3.qrtz_cron_triggers 4.qrtz_fired_tri ...
- Quartz表结构说明
https://www.cnblogs.com/meet/p/Quartz-biao-jie-gou-shuo-ming.html
- 根据Ibatis的SqlMap配置文件生成表结构
分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 有一份应用完整的源 ...
- quartz 2.x 表结构说明
一.quartz 表说明 序号 表名 说明 1. qrtz_calendars 以 Blob 类型存储 Quartz 的 Calendar 信息 2. qrtz_cron_triggers 存储 Cr ...
- CGB2005 JT-1(jt概述 SqlYog 物理模型图PD 表结构 pom文件标签说明 jt环境搭建 创建项目2种,创建各种文件 idea导入,打包,删除项目,启动原理)
注意事项: 1.京淘项目概述和动吧项目缺点描述 2.把sql文件导入数据库:通过SqlYog可视化工具或者Dos命令窗口. 3.SqlYog说明,和制作物理模型图的工具pd用发. 4.表结构学习 5. ...
- 菜鸟学SSH(十二)——Hibernate与Spring配合生成表结构
前几天向大家介绍了一种用工具类生成数据表的方法,不过之前的方法需要使用一个跟项目关系不大的工具类.不免让人觉得有些多余,所以呢,今天再向大家介绍一种方法.即Hibernate与Spring配合生成表结 ...
- mysql jdbc 表结构_JavaEE_day09_MySQL多表JDBC
一.数据库表结构: 首先,有两个表: 分类表:category create table category( cid varchar(32) primary key, cname varchar(10 ...
- 开源数据库表结构文档生成器
大家好,我是TJ 一个励志推荐10000款开源项目与工具的程序员 TJ君前几天和一个在银行科技部上班的同学聚会,同学跟TJ君吐槽,一些小银行的科技表面看上去专业,实际各种马虎不负责. 打个比方,有一次 ...
- 如何将oracle数据库中的表结构导入到sqlserver中,Oracle转换成SqlServer数据库的步骤...
1 背景 ITM系统目前支持MysqL.Oracle数据库,由于现在需要和CA产品进行结合,用CA产品的采集功能进行数据采集,因此需要使用CA产品的sqlServer数据库,为了使得系统支持sqlse ...
最新文章
- 继续聊WPF——Slider控件
- 2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) - D Count The Bits
- Adobe form batch output print mode - multiple
- MySQL 导出命令
- double在mysql中是什么类型_为什么PVC输送带深受企业的青睐?
- python rsa库_Python中rsa模块【sign 加签验签】的使用
- CCNA红头发视频教程全集---91lab
- DirectX 发展历程
- MemCached存储原理
- Faster RCNN论文总结
- Kossel 升级记 - 混乱之始
- The setting mapUnderScoreToCamelCase is not known. Make sure you spelled it correctly (case sensiti
- 计组(七)存储系统:芯片地址
- chrome所有页面崩溃【转载】
- cesium 起火_数字房子着火了
- 2018 年,做平凡世界里的超人
- http,post请求
- 接口测试要点及用例设计
- java 二叉树的最小深度详解
- jQuery控制 input 不可编辑