select * from test.QRTZ_TRIGGERS 触发器表

select * from QRTZ_PAUSED_TRIGGER_GRPS 暂停的分组任务表

select * from QRTZ_LOCKS 锁表

select * from QRTZ_JOB_DETAILS 任务表详情((调度名字和分组和job名字唯一决定一个job))

select * from QRTZ_FIRED_TRIGGERS  任务执行详情

[1]插入一个任务

1、先从LOCKS中获取行级锁,锁标识(TRIGGER_ACCESS)

2、查看是否存在JOB_DETAILS,不存在保存

3、查看是否存在TRIGGERS

->判断当前分组是否暂停PAUSED_TRIGGER_GRPS,或所有分组是否暂停。如暂停,TRIGGERS为PAUSED

->如果当前定时任务,不允许执行,则去FIRED_TRIGGERS里查询其状态。其状态,为TRIGGERS的状态。(当前TRIGGERS状态不为WAITING和PAUSED,则返回当天状态,如果)

4、保存TRIGGERS(保存的时候,其状态很重要,依赖PAUSED_TRIGGER_GRPS,FIRED_TRIGGERS里的数据)

5、commit或roball

[2]一次触发任务调度的计划

1、先从LOCKS中获取行级锁,锁标识(TRIGGER_ACCESS)

2、访问TRIGGERS,找出最近要执行的,且状态为WAITING的触发器列表。List(triggerName和triggerGroup),再遍历逐个访问TRIGGERS和JOB_DETAILS表

  ->修改TRIGGERS表记录的状态由WATING-ACQUIRED

->在FIRED_TRIGGERS表中插入新记录,状态为ACQUIRED

3、如果出现异常,根据FIRED_TRIGGERS表中的instanceName查询出,所有的FIRED_TRIGGERS记录,验证刚才获取的TRIGGERS列表中是否包含相同instanceName

4、释放行级锁,锁标识(TRIGGER_ACCESS)

5、如果达到要执行任务的时间,在此获取TRIGGER_ACCESS

6,根据要激活List<Triggers>,验证每一条TRIGGERS的状态是否为ACQUIRED(如果存在获取当前状态,如果不存在状态为:DELETED)

->如果是,则继续验证JOB_DETAILS

->如果不是,返回null

7、验证job,是否存在

8、修改FIRED_TRIGGERS的状态:ACQUIRED->EXECUTING

--->如果修改验证过程中有异常,则将TRIGGERS的状态从ACQUIRED-->WATIING,并根据instanceName删除FIRED_TRIGGERS里的记录。

9、将TRIGGERS表的状态:ACQUIRED->WATIING

10、释放锁

11、创建内存的JobRunShell,交给工作线程运行。


//等待
String STATE_WAITING = "WAITING"; //获取
String STATE_ACQUIRED = "ACQUIRED"; //执行
String STATE_EXECUTING = "EXECUTING"; //完成
String STATE_COMPLETE = "COMPLETE"; //阻塞
String STATE_BLOCKED = "BLOCKED"; //错误
String STATE_ERROR = "ERROR"; //暂停
String STATE_PAUSED = "PAUSED"; //暂停阻塞
String STATE_PAUSED_BLOCKED = "PAUSED_BLOCKED"; //删除
String STATE_DELETED = "DELETED"; //错过
String STATE_MISFIRED = "MISFIRED";

【Quartz】Quartz的数据库表的更多相关文章

  1. quartz 持久化 数据库表

    此处只包括配置数据库操作 quartz 持久化数据库表格字段解释建表,SQL语句在dbTables文件夹中可以找到,介绍下我们开发主要使用到的表: (版本不一样,可能数据库表也不一样,这里使用2.2. ...

  2. quartz定时任务(数据库需要的表)

    Quartz将Job保存在数据库中所需表的说明 QRTZ_CALENDARS 以 Blob 类型存储 Quartz 的 Calendar 信息 QRTZ_CRON_TRIGGERS 存储 Cron T ...

  3. Quartz所使用的表的说明

    Quartz将Job保存在数据库中所需表的说明 QRTZ_CALENDARS 以 Blob 类型存储 Quartz 的 Calendar 信息 QRTZ_CRON_TRIGGERS 存储 Cron T ...

  4. 绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来

    我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...

  5. 数据库表结构设计方法及原则(li)

    数据库设计的三大范式:为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的总结.要想设计一个结构合理的关系型数据库,必须满 ...

  6. 对于多个数据库表对应一个Model问题的思考

    最近做项目遇到一个场景,就是客户要求为其下属的每一个分支机构建一个表存储相关数据,而这些表的结构都是一样的,只是分属于不同的机构.这个问题抽象一下就是多个数据库表对应一个Model(或者叫实体类).有 ...

  7. C# .Net :Excel NPOI导入导出操作教程之将Excel文件读取并写到数据库表,示例分享

    using (FileStream fileReader = File.OpenRead(@"C:\Users\Administrator\Desktop\112.xls"))   ...

  8. mysql数据库表的自增主键号不规律,重新排列

    mysql数据库表的自增主键ID乱了,需要重新排序. 原理:删除原有的自增ID,重新建立新的自增ID. 1.删除原有主键: ALTER TABLE `table_name` DROP `id`; 2. ...

  9. 数据库(SQL Server)管理数据库表~新奇之处

    说到“数据库”,我总有一种莫名的感觉,在刚刚接触到的数据库中就让我似懂非懂渡过着,于是思考着.于是在冷静的时空中让我回想到了很多的知识,不知你们是怎样过来的,真心希望我的这篇数据库总结能够让我们都有一 ...

  10. hibernate笔记--通过SchemaExport生成数据库表

    方法比较简单,项目中只需要两个java类(一个实体类,如User,一个工具类),两个配置文件(hibernate必须的两个配置文件hibernate.cfg.xml,与User.hbm.xml),即可 ...

随机推荐

  1. Linux crontab定时执行任务 命令格式与详细例子(转)

    基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 第4列表示 ...

  2. CDS & ORF & 启动子 & 终止子 & 转录因子 & 基因结构 & UTR

    ORF和CDS的区别 ORF的英文展开是open reading frame(开放阅读框). CDS的英文展开是coding sequences (编码区). CDS:DNA转录成mRNA,mRNA经 ...

  3. nyoj 1237 简单dfs

    最大岛屿 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 神秘的海洋,惊险的探险之路,打捞海底宝藏,激烈的海战,海盗劫富等等.加勒比海盗,你知道吧?杰克船长驾驶着自己 ...

  4. HDOJ1004

    #include<iostream> #include "cstring" using namespace std; int add(char s1[],char s2 ...

  5. shell里的/dev/null 2>&1详解

    shell中可能经常能看到: >/dev/null 2>&1 命令意思是:标准输出stdout 和标准错误输出stderr 也重定向到空设备文件,即不显示输出信息 分解这个组合:“ ...

  6. learning docker steps(8) ----- docker network 初次体验

    参考: docker network 主要是介绍了docker 容器之间的组网模式, 一般来说实像组网主要是依赖于bridge iptalbes vlan来实现,但是附带的如端口转发会降低效率. 新型 ...

  7. bzoj1572

    题解: 每一次不能满足的时候 找一个之前有过的 然后最小的 和他替换 代码: #include<bits/stdc++.h> using namespace std; ; long lon ...

  8. Log4j在Java工程中使用方法

    Eclipse新建Java工程,工程目录如下 1.下载log4j的Jar包,在Java工程下新建lib文件夹,将jar包拷贝到此文件夹,并将其加入到路径中,即:Jar包上右键——Build Path— ...

  9. Memcached 扩展常用方法

    保存数据 向memcached保存数据的方法有 add replace set 它们的使用方法都相同: $add = $memcached->add( '键', '值', '期限' ); $re ...

  10. C++中的数据存储方式自动存储、静态存储和动态存储

    C++中变量存储方式有三种,自动存储,静态存储,动态存储 自动存储简单意义上就是在函数内不用任何关键字直接定义的变量,它在函数被调用时被创建,在函数退出时自动消失, 静态存储顾名思义就是在程序的整个运 ...