一、前言
上篇 《Quartz介绍》中使用的是RAMJobStored存储调度信息,当进程终止调度信息会丢失,本篇我们介绍使用JDBCJobStore来存储调度信息(jobs、Triggers和日历)。
二、Quartz 表结构
可以从官网(http://www.quartz-scheduler.org/)下载的包中得到建表的SQL。
路径如下:
/src/org/quartz/impl/jdbcjobstore/tables_mysql.sql
QRTZ_CRON_TRIGGERS:存储cron类型的触发器。
QRTZ_FIRED_TRIGGERS:存放已触发的触发器
QRTZ_JOB_DETAILS:存放jobDetail信息
QRTZ_SIMPLE_TRIGGERS:简单触发器信息
QRTZ_TRIGGERS:触发器基本信息
---------------------------------------------------
QRTZ_BLOB_TRIGGERS:以BLOB类型存储的触发器。
QRTZ_CALENDARS: 存放日历信息。
QRTZ_LOCKS:存储程序销的信息
QRTZ_PAUSED_TRIGGER_GRPS:存放暂停掉的触发器
QRTZ_SCHEDULER_STATE:调度器状态
QRTZ_SIMPROP_TRIGGERS:用于存储CalendarIntervalTrigger和DailyTimeIntervalTrigger。
三、任务持久化配置例子
1、导入依赖:增加mysql
2、quartz.properties:配置数据源
注:这里jobstore换成org.quartz.impl.jdbcjobstore.JobStoreTX然后配置数据连接,也可以配置连接池。
3、任务类
4、调度类
注:这里使用的是SimpleScheduleBuilder,创建一个简单的任务调度器
5、运行后查看表中的数据
QRTZ_TRIGGERS:触发器基本信息
QRTZ_FIRED_TRIGGERS:已触发触发器信息
QRTZ_SIMPLE_TRIGGERS:简单触发器
注:这里存储了触发器重复次数,重复间隔以及已经触发了几次的信息。
QRTZ_JOB_DETAILS:存放jobDetail信息
注:任务Class的路径以及任务数据。
如果换成触发器换成表达式
这里会在QRTZ_CRON_TRIGGERS表中生成数据。
QRTZ_CRON_TRIGGERS:CronScheduleBuilder触发器信息
四、可视化界面开发
一个项目中定时任务比较多,如果没有可视化界面维护会比较困难,那用了Quartz如何给它做个可视化界面呢。
创建任务
就是调用上面调度类创建任务,任务名称、触发器名称、触发器表达式。scheduler.scheduleJob(jobDetail,trigger); 这样就会把触发器保存在数据库中。
注:一个触发器可以有多个任务,但一般场景下一个触发器一个任务也能满足需求,一个任务多个触发器应该是不可以的。
修改任务
调用Schedule.rescheduleJob接口完成更改,修改后需要重启应用。
禁用任务
JobKey jobKey = JobKey.jobKey(jobName, jobGroup);
getScheduler().deleteJob(jobKey);
立即运行
getScheduler().triggerJob(jobKey);