Quartz入门 (五) JDBCStore
时间:2021-07-01 10:21:17
帮助过:6人阅读
DATABASE IF EXISTS quartz;
CREATE DATABASE quartz
DEFAULT CHARACTER SET utf8;
USE quartz;
DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
DROP TABLE IF EXISTS QRTZ_LOCKS;
DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
DROP TABLE IF EXISTS QRTZ_CALENDARS;
CREATE TABLE QRTZ_JOB_DETAILS
(
SCHED_NAME VARCHAR(
120)
NOT NULL,
JOB_NAME VARCHAR(
100)
NOT NULL,
JOB_GROUP VARCHAR(
100)
NOT NULL,
DESCRIPTION VARCHAR(
250)
NULL,
JOB_CLASS_NAME VARCHAR(
250)
NOT NULL,
IS_DURABLE VARCHAR(
1)
NOT NULL,
IS_NONCONCURRENT VARCHAR(
1)
NOT NULL,
IS_UPDATE_DATA VARCHAR(
1)
NOT NULL,
REQUESTS_RECOVERY VARCHAR(
1)
NOT NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
);
CREATE TABLE QRTZ_TRIGGERS
(
SCHED_NAME VARCHAR(
120)
NOT NULL,
TRIGGER_NAME VARCHAR(
100)
NOT NULL,
TRIGGER_GROUP VARCHAR(
100)
NOT NULL,
JOB_NAME VARCHAR(
100)
NOT NULL,
JOB_GROUP VARCHAR(
100)
NOT NULL,
DESCRIPTION VARCHAR(
250)
NULL,
NEXT_FIRE_TIME BIGINT(
13)
NULL,
PREV_FIRE_TIME BIGINT(
13)
NULL,
PRIORITY INTEGER NULL,
TRIGGER_STATE VARCHAR(
16)
NOT NULL,
TRIGGER_TYPE VARCHAR(
8)
NOT NULL,
START_TIME BIGINT(
13)
NOT NULL,
END_TIME BIGINT(
13)
NULL,
CALENDAR_NAME VARCHAR(
100)
NULL,
MISFIRE_INSTR SMALLINT(
2)
NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)
);
CREATE TABLE QRTZ_SIMPLE_TRIGGERS
(
SCHED_NAME VARCHAR(
120)
NOT NULL,
TRIGGER_NAME VARCHAR(
100)
NOT NULL,
TRIGGER_GROUP VARCHAR(
100)
NOT NULL,
REPEAT_COUNT BIGINT(
7)
NOT NULL,
REPEAT_INTERVAL BIGINT(
12)
NOT NULL,
TIMES_TRIGGERED BIGINT(
10)
NOT NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
CREATE TABLE QRTZ_CRON_TRIGGERS
(
SCHED_NAME VARCHAR(
120)
NOT NULL,
TRIGGER_NAME VARCHAR(
100)
NOT NULL,
TRIGGER_GROUP VARCHAR(
100)
NOT NULL,
CRON_EXPRESSION VARCHAR(
100)
NOT NULL,
TIME_ZONE_ID VARCHAR(
80),
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
CREATE TABLE QRTZ_SIMPROP_TRIGGERS
(
SCHED_NAME VARCHAR(
120)
NOT NULL,
TRIGGER_NAME VARCHAR(
100)
NOT NULL,
TRIGGER_GROUP VARCHAR(
100)
NOT NULL,
STR_PROP_1 VARCHAR(
512)
NULL,
STR_PROP_2 VARCHAR(
512)
NULL,
STR_PROP_3 VARCHAR(
512)
NULL,
INT_PROP_1 INT NULL,
INT_PROP_2 INT NULL,
LONG_PROP_1 BIGINT NULL,
LONG_PROP_2 BIGINT NULL,
DEC_PROP_1 NUMERIC(13,
4)
NULL,
DEC_PROP_2 NUMERIC(13,
4)
NULL,
BOOL_PROP_1 VARCHAR(
1)
NULL,
BOOL_PROP_2 VARCHAR(
1)
NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
CREATE TABLE QRTZ_BLOB_TRIGGERS
(
SCHED_NAME VARCHAR(
120)
NOT NULL,
TRIGGER_NAME VARCHAR(
100)
NOT NULL,
TRIGGER_GROUP VARCHAR(
100)
NOT NULL,
BLOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
CREATE TABLE QRTZ_CALENDARS
(
SCHED_NAME VARCHAR(
120)
NOT NULL,
CALENDAR_NAME VARCHAR(
100)
NOT NULL,
CALENDAR BLOB NOT NULL,
PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)
);
CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS
(
SCHED_NAME VARCHAR(
120)
NOT NULL,
TRIGGER_GROUP VARCHAR(
100)
NOT NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)
);
CREATE TABLE QRTZ_FIRED_TRIGGERS
(
SCHED_NAME VARCHAR(
120)
NOT NULL,
ENTRY_ID VARCHAR(
95)
NOT NULL,
TRIGGER_NAME VARCHAR(
100)
NOT NULL,
TRIGGER_GROUP VARCHAR(
100)
NOT NULL,
INSTANCE_NAME VARCHAR(
100)
NOT NULL,
FIRED_TIME BIGINT(
13)
NOT NULL,
SCHED_TIME BIGINT(
13)
NOT NULL,
PRIORITY INTEGER NOT NULL,
STATE VARCHAR(
16)
NOT NULL,
JOB_NAME VARCHAR(
100)
NULL,
JOB_GROUP VARCHAR(
100)
NULL,
IS_NONCONCURRENT VARCHAR(
1)
NULL,
REQUESTS_RECOVERY VARCHAR(
1)
NULL,
PRIMARY KEY (SCHED_NAME,ENTRY_ID)
);
CREATE TABLE QRTZ_SCHEDULER_STATE
(
SCHED_NAME VARCHAR(
120)
NOT NULL,
INSTANCE_NAME VARCHAR(
100)
NOT NULL,
LAST_CHECKIN_TIME BIGINT(
13)
NOT NULL,
CHECKIN_INTERVAL BIGINT(
13)
NOT NULL,
PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)
);
CREATE TABLE QRTZ_LOCKS
(
SCHED_NAME VARCHAR(
120)
NOT NULL,
LOCK_NAME VARCHAR(
40)
NOT NULL,
PRIMARY KEY (SCHED_NAME,LOCK_NAME)
);
commit;
配置文件:
quartz.properties
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.scheduler.instanceName = MyScheduler
org.quartz.threadPool.threadCount = 3
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.dataSource = mysqlDatabase
org.quartz.dataSource.mysqlDatabase.driver = com.mysql.jdbc.Driver
org.quartz.dataSource.mysqlDatabase.URL = jdbc:mysql://localhost:3306/quartz?characterEncoding=utf-8
org.quartz.dataSource.mysqlDatabase.user = root
org.quartz.dataSource.mysqlDatabase.password = 123456
org.quartz.dataSource.mysqlDatabase.maxConnections = 5
测试:
package com.lc.jdbcStore;
import com.lc.MailJob;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger;
public class TestQuartz {
public static void main(String[] args) throws Exception {
try {
assginNewJob();
} catch (ObjectAlreadyExistsException e) {
System.err.println("发现任务已经在数据库存在了,直接从数据库里运行:"+ e.getMessage());
resumeJobFromDatabase();
}
}
private static void resumeJobFromDatabase() throws Exception {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
// 等待200秒,让前面的任务都执行完了之后,再关闭调度器
Thread.sleep(200000);
scheduler.shutdown(true);
}
private static void assginNewJob() throws SchedulerException, InterruptedException {
// 创建调度器
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// 定义一个触发器
Trigger trigger = newTrigger().withIdentity("trigger1", "group1") // 定义名称和所属的租
.startNow()
.withSchedule(simpleSchedule().withIntervalInSeconds(15) // 每隔15秒执行一次
.withRepeatCount(10)) // 总共执行11次(第一次执行不基数)
.build();
// 定义一个JobDetail
JobDetail job = newJob(MailJob.class) // 指定干活的类MailJob
.withIdentity("mailjob1", "mailgroup") // 定义任务名称和分组
.usingJobData("email", "admin@10086.com") // 定义属性
.build();
// 调度加入这个job
scheduler.scheduleJob(job, trigger);
// 启动
scheduler.start();
// 等待20秒,让前面的任务都执行完了之后,再关闭调度器
Thread.sleep(20000);
scheduler.shutdown(true);
}
}
Quartz入门 (五) JDBCStore
标签:obb builder pause strong sql password time store admin