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;

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值