quartz 高级使用(quartz 二)
添加maven的pom配置
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
</dependency>
RAMJobStore
RAMJobStore是使用最简单的JobStore,它也是性能最高的(在CPU时间方面)
新增一个配置文件quartz.properties
#============================================================================
# Configure Main Scheduler Properties
#============================================================================
org.quartz.scheduler.instanceName: TestScheduler
org.quartz.scheduler.instanceId: AUTO
org.quartz.scheduler.skipUpdateCheck: true
#============================================================================
# Configure ThreadPool
#============================================================================
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 12
org.quartz.threadPool.threadPriority: 5
#============================================================================
# Configure JobStore
#============================================================================
org.quartz.jobStore.misfireThreshold: 60000
org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore
新增任务job
public class EchoJob implements Job {
private static Logger _log = LoggerFactory.getLogger(EchoJob.class);
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
_log.debug("echo: 入门例子");
}
}
调度入口
/**
* Created by it
* Created in 2019年1月26日
* Description: RAMJobStore使用
*/
public class Example4 {
private static Logger _log = LoggerFactory.getLogger(Example4.class);
public static void main(String[] args) throws Exception {
Scheduler scheduler = new StdSchedulerFactory("quartz.properties").getScheduler();
scheduler.start();
_log.debug("调度器启动成功...");
// 定义一次任务
JobDetail job = JobBuilder.newJob(EchoJob.class)
.withIdentity("jobName1", "groupName1").build();
// 定义执行时间,2秒1次
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("triggerName1", "groupName1")
.withSchedule(
CronScheduleBuilder.cronSchedule("0/2 * * * * ?"))
.build();
_log.debug("调度器,添加一次任务:{}", job.getKey());
scheduler.scheduleJob(job, trigger);
TimeUnit.SECONDS.sleep(10);
scheduler.shutdown(true);
_log.debug("调度器10秒后停止,shutdown入参:{},让任务调度完", true);
}
}
测试结果
通过properties文件配置调度任务
更改配置文件quartz.properties
#============================================================================
# Configure Main Scheduler Properties
#============================================================================
org.quartz.scheduler.instanceName: TestScheduler
org.quartz.scheduler.instanceId: AUTO
org.quartz.scheduler.skipUpdateCheck: true
#============================================================================
# Configure ThreadPool
#============================================================================
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 12
org.quartz.threadPool.threadPriority: 5
#============================================================================
# Configure JobStore
#============================================================================
org.quartz.jobStore.misfireThreshold: 60000
org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore
#============================================================================
# Configure job
#============================================================================
org.quartz.plugin.triggHistory.class: org.quartz.plugins.history.LoggingJobHistoryPlugin
org.quartz.plugin.jobInitializer.class: org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames: quartz_jobs.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound: true
org.quartz.plugin.jobInitializer.scanInterval: 120
org.quartz.plugin.jobInitializer.wrapInUserTransaction: false
org.quartz.plugin.jobInitializer.fileNames: quartz_jobs.xml
quartz_jobs.xml
<?xml version="1.0" encoding="UTF-8"?>
<job-scheduling-data xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"
version="1.8">
<pre-processing-commands>
<delete-jobs-in-group>*</delete-jobs-in-group> <!-- clear all jobs in scheduler -->
<delete-triggers-in-group>*</delete-triggers-in-group> <!-- clear all triggers in scheduler -->
</pre-processing-commands>
<processing-directives>
<!-- if there are any jobs/trigger in scheduler of same name (as in this file), overwrite them -->
<overwrite-existing-data>true</overwrite-existing-data>
<!-- if there are any jobs/trigger in scheduler of same name (as in this file), and over-write is false, ignore them rather then generating an error -->
<ignore-duplicates>false</ignore-duplicates>
</processing-directives>
<schedule>
<job>
<name>jobName1</name>
<group>groupName1</group>
<job-class>priv.dengjl.my_quartz.job.EchoJob</job-class>
</job>
<trigger>
<cron>
<name>triggerName1</name>
<group>groupName1</group>
<job-name>jobName1</job-name>
<job-group>groupName1</job-group>
<cron-expression>0/2 * * * * ?</cron-expression>
</cron>
</trigger>
</schedule>
</job-scheduling-data>
更改调度入口
/**
* Created by it
* Created in 2019年1月26日
* Description: properties+xml配置调度任务
*/
public class Example5 {
private static Logger _log = LoggerFactory.getLogger(Example5.class);
public static void main(String[] args) throws Exception {
Scheduler scheduler = new StdSchedulerFactory("quartz.properties").getScheduler();
_log.debug("通过quartz.properties加载任务成功");
scheduler.start();
_log.debug("调度器启动成功...");
TimeUnit.SECONDS.sleep(4);
scheduler.shutdown(true);
_log.debug("调度器4秒后停止,shutdown入参:{},让任务调度完", true);
}
}
测试结果
[INFO] 27 一月 06:31:10.605 下午 main [org.quartz.impl.StdSchedulerFactory]
Using default implementation for ThreadExecutor
[INFO] 27 一月 06:31:10.629 下午 main [org.quartz.core.SchedulerSignalerImpl]
Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
[INFO] 27 一月 06:31:10.629 下午 main [org.quartz.core.QuartzScheduler]
Quartz Scheduler v.2.2.3 created.
[INFO] 27 一月 06:31:10.631 下午 main [org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin]
Registering Quartz Job Initialization Plug-in.
[INFO] 27 一月 06:31:10.634 下午 main [org.quartz.simpl.RAMJobStore]
RAMJobStore initialized.
[INFO] 27 一月 06:31:10.635 下午 main [org.quartz.core.QuartzScheduler]
Scheduler meta-data: Quartz Scheduler (v2.2.3) 'TestScheduler' with instanceId 'NON_CLUSTERED'
Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
NOT STARTED.
Currently in standby mode.
Number of jobs executed: 0
Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 12 threads.
Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
[INFO] 27 一月 06:31:10.638 下午 main [org.quartz.impl.StdSchedulerFactory]
Quartz scheduler 'TestScheduler' initialized from the specified file : 'quartz.properties' from the class resource path.
[INFO] 27 一月 06:31:10.639 下午 main [org.quartz.impl.StdSchedulerFactory]
Quartz scheduler version: 2.2.3
[DEBUG] 27 一月 06:31:10.639 下午 main [priv.dengjl.my_quartz.scheduler.Example5]
通过quartz.properties加载任务成功
[INFO] 27 一月 06:31:10.661 下午 main [org.quartz.xml.XMLSchedulingDataProcessor]
Parsing XML file: quartz_jobs.xml with systemId: quartz_jobs.xml
[INFO] 27 一月 06:31:10.754 下午 main [org.quartz.xml.XMLSchedulingDataProcessor]
Deleting all jobs in ALL groups.
[INFO] 27 一月 06:31:10.754 下午 main [org.quartz.xml.XMLSchedulingDataProcessor]
Deleting all triggers in ALL groups.
[INFO] 27 一月 06:31:10.755 下午 main [org.quartz.xml.XMLSchedulingDataProcessor]
Adding 1 jobs, 1 triggers.
[INFO] 27 一月 06:31:10.755 下午 main [org.quartz.xml.XMLSchedulingDataProcessor]
Adding job: groupName1.jobName1
[INFO] 27 一月 06:31:10.757 下午 main [org.quartz.core.QuartzScheduler]
Scheduler TestScheduler_$_NON_CLUSTERED started.
[DEBUG] 27 一月 06:31:10.757 下午 main [priv.dengjl.my_quartz.scheduler.Example5]
调度器启动成功...
[INFO] 27 一月 06:31:10.771 下午 TestScheduler_Worker-1 [org.quartz.plugins.history.LoggingJobHistoryPlugin]
Job groupName1.jobName1 fired (by trigger groupName1.triggerName1) at: 18:31:10 01/27/2019
[DEBUG] 27 一月 06:31:10.772 下午 TestScheduler_Worker-1 [priv.dengjl.my_quartz.job.EchoJob]
echo: 入门例子
[INFO] 27 一月 06:31:10.772 下午 TestScheduler_Worker-1 [org.quartz.plugins.history.LoggingJobHistoryPlugin]
Job groupName1.jobName1 execution complete at 18:31:10 01/27/2019 and reports: null
[INFO] 27 一月 06:31:10.782 下午 TestScheduler_Worker-2 [org.quartz.plugins.history.LoggingJobHistoryPlugin]
Job JobSchedulingDataLoaderPlugin.JobSchedulingDataLoaderPlugin_jobInitializer_quartz_jobs_xml fired (by trigger JobSchedulingDataLoaderPlugin.JobSchedulingDataLoaderPlugin_jobInitializer_quartz_jobs_xml) at: 18:31:10 01/27/2019
[INFO] 27 一月 06:31:10.783 下午 TestScheduler_Worker-2 [org.quartz.plugins.history.LoggingJobHistoryPlugin]
Job JobSchedulingDataLoaderPlugin.JobSchedulingDataLoaderPlugin_jobInitializer_quartz_jobs_xml execution complete at 18:31:10 01/27/2019 and reports: null
[INFO] 27 一月 06:31:12.002 下午 TestScheduler_Worker-3 [org.quartz.plugins.history.LoggingJobHistoryPlugin]
Job groupName1.jobName1 fired (by trigger groupName1.triggerName1) at: 18:31:12 01/27/2019
[DEBUG] 27 一月 06:31:12.002 下午 TestScheduler_Worker-3 [priv.dengjl.my_quartz.job.EchoJob]
echo: 入门例子
[INFO] 27 一月 06:31:12.002 下午 TestScheduler_Worker-3 [org.quartz.plugins.history.LoggingJobHistoryPlugin]
Job groupName1.jobName1 execution complete at 18:31:12 01/27/2019 and reports: null
[INFO] 27 一月 06:31:14.002 下午 TestScheduler_Worker-4 [org.quartz.plugins.history.LoggingJobHistoryPlugin]
Job groupName1.jobName1 fired (by trigger groupName1.triggerName1) at: 18:31:14 01/27/2019
[DEBUG] 27 一月 06:31:14.002 下午 TestScheduler_Worker-4 [priv.dengjl.my_quartz.job.EchoJob]
echo: 入门例子
[INFO] 27 一月 06:31:14.002 下午 TestScheduler_Worker-4 [org.quartz.plugins.history.LoggingJobHistoryPlugin]
Job groupName1.jobName1 execution complete at 18:31:14 01/27/2019 and reports: null
[INFO] 27 一月 06:31:14.758 下午 main [org.quartz.core.QuartzScheduler]
Scheduler TestScheduler_$_NON_CLUSTERED shutting down.
[INFO] 27 一月 06:31:14.759 下午 main [org.quartz.core.QuartzScheduler]
Scheduler TestScheduler_$_NON_CLUSTERED paused.
[INFO] 27 一月 06:31:15.118 下午 main [org.quartz.core.QuartzScheduler]
Scheduler TestScheduler_$_NON_CLUSTERED shutdown complete.
[DEBUG] 27 一月 06:31:15.142 下午 main [priv.dengjl.my_quartz.scheduler.Example5]
调度器4秒后停止,shutdown入参:true,让任务调度完
JDBC JobStore(基于mysql)
这里使用mysql数据库
添加以下表
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(200) NOT NULL,
JOB_GROUP VARCHAR(200) 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))
ENGINE=InnoDB;
CREATE TABLE QRTZ_TRIGGERS (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
JOB_NAME VARCHAR(200) NOT NULL,
JOB_GROUP VARCHAR(200) 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(200) 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))
ENGINE=InnoDB;
CREATE TABLE QRTZ_SIMPLE_TRIGGERS (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) 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))
ENGINE=InnoDB;
CREATE TABLE QRTZ_CRON_TRIGGERS (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
CRON_EXPRESSION VARCHAR(120) 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))
ENGINE=InnoDB;
CREATE TABLE QRTZ_SIMPROP_TRIGGERS
(
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) 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))
ENGINE=InnoDB;
CREATE TABLE QRTZ_BLOB_TRIGGERS (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
BLOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
INDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
ENGINE=InnoDB;
CREATE TABLE QRTZ_CALENDARS (
SCHED_NAME VARCHAR(120) NOT NULL,
CALENDAR_NAME VARCHAR(200) NOT NULL,
CALENDAR BLOB NOT NULL,
PRIMARY KEY (SCHED_NAME,CALENDAR_NAME))
ENGINE=InnoDB;
CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP))
ENGINE=InnoDB;
CREATE TABLE QRTZ_FIRED_TRIGGERS (
SCHED_NAME VARCHAR(120) NOT NULL,
ENTRY_ID VARCHAR(95) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
INSTANCE_NAME VARCHAR(200) 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(200) NULL,
JOB_GROUP VARCHAR(200) NULL,
IS_NONCONCURRENT VARCHAR(1) NULL,
REQUESTS_RECOVERY VARCHAR(1) NULL,
PRIMARY KEY (SCHED_NAME,ENTRY_ID))
ENGINE=InnoDB;
CREATE TABLE QRTZ_SCHEDULER_STATE (
SCHED_NAME VARCHAR(120) NOT NULL,
INSTANCE_NAME VARCHAR(200) NOT NULL,
LAST_CHECKIN_TIME BIGINT(13) NOT NULL,
CHECKIN_INTERVAL BIGINT(13) NOT NULL,
PRIMARY KEY (SCHED_NAME,INSTANCE_NAME))
ENGINE=InnoDB;
CREATE TABLE QRTZ_LOCKS (
SCHED_NAME VARCHAR(120) NOT NULL,
LOCK_NAME VARCHAR(40) NOT NULL,
PRIMARY KEY (SCHED_NAME,LOCK_NAME))
ENGINE=InnoDB;
CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON QRTZ_JOB_DETAILS(SCHED_NAME,REQUESTS_RECOVERY);
CREATE INDEX IDX_QRTZ_J_GRP ON QRTZ_JOB_DETAILS(SCHED_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_T_J ON QRTZ_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_T_JG ON QRTZ_TRIGGERS(SCHED_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_T_C ON QRTZ_TRIGGERS(SCHED_NAME,CALENDAR_NAME);
CREATE INDEX IDX_QRTZ_T_G ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);
CREATE INDEX IDX_QRTZ_T_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_N_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_N_G_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON QRTZ_TRIGGERS(SCHED_NAME,NEXT_FIRE_TIME);
CREATE INDEX IDX_QRTZ_T_NFT_ST ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME);
CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME);
CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME);
CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY);
CREATE INDEX IDX_QRTZ_FT_J_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_FT_JG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_FT_T_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
CREATE INDEX IDX_QRTZ_FT_TG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);
commit;
新增文件quartz_mysql.properties
#============================================================================
# Configure Main Scheduler Properties
#============================================================================
org.quartz.scheduler.instanceName: TestScheduler
org.quartz.scheduler.instanceId: instance_one
org.quartz.scheduler.skipUpdateCheck: true
#============================================================================
# Configure ThreadPool
#============================================================================
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 5
org.quartz.threadPool.threadPriority: 5
#============================================================================
# Configure JobStore
#============================================================================
org.quartz.jobStore.misfireThreshold: 60000
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties=false
org.quartz.jobStore.dataSource=myDS
org.quartz.jobStore.tablePrefix=QRTZ_
org.quartz.jobStore.isClustered=true
#============================================================================
# Configure Datasources
#============================================================================
org.quartz.dataSource.myDS.driver: com.mysql.cj.jdbc.Driver
org.quartz.dataSource.myDS.URL: jdbc:mysql://127.0.0.1:3306/quartz
org.quartz.dataSource.myDS.user: root
org.quartz.dataSource.myDS.password: root
org.quartz.dataSource.myDS.maxConnections: 5
org.quartz.dataSource.myDS.validationQuery: select 0
更改调度入口
/**
* Created by it
* Created in 2019年1月26日
* Description: JDBC JobStore使用
*/
public class Example6 {
private static Logger _log = LoggerFactory.getLogger(Example6.class);
public static void main(String[] args) throws Exception {
Scheduler scheduler = new StdSchedulerFactory("quartz_mysql.properties").getScheduler();
scheduler.start();
_log.debug("调度器启动成功...");
// 定义一次任务
JobDetail job = JobBuilder.newJob(EchoJob.class)
.withIdentity("jobName1", "groupName1").build();
// 定义执行时间,2秒1次
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("triggerName1", "groupName1")
.withSchedule(
CronScheduleBuilder.cronSchedule("0/2 * * * * ?"))
.build();
_log.debug("调度器,添加一次任务:{}", job.getKey());
scheduler.scheduleJob(job, trigger);
TimeUnit.SECONDS.sleep(10);
scheduler.shutdown(true);
_log.debug("调度器10秒后停止,shutdown入参:{},让任务调度完", true);
}
}
测试结果
同上,但是多了数据库执行的调度过程
数据库
select * from QRTZ_FIRED_TRIGGERS;
select * from QRTZ_PAUSED_TRIGGER_GRPS;
select * from QRTZ_SCHEDULER_STATE;
select * from QRTZ_LOCKS;
select * from QRTZ_SIMPLE_TRIGGERS;
select * from QRTZ_SIMPROP_TRIGGERS;
select * from QRTZ_CRON_TRIGGERS;
select * from QRTZ_BLOB_TRIGGERS;
select * from QRTZ_TRIGGERS;
select * from QRTZ_JOB_DETAILS;
select * from QRTZ_CALENDARS;