oracle quartz分布式_Quartz + Oracle 分布式Job实现

本文介绍了如何在Oracle环境中配置和实现Quartz分布式Job。详细阐述了所需的依赖包,如HikariCP和Quartz库的版本。接着,展示了Quartz的配置文件,包括Spring的SchedulerFactoryBean配置和quartz.properties的设置,强调了集群和数据存储的相关参数。此外,还提供了创建必要的数据库表的SQL脚本,用于存储Job详情和触发器等信息。
摘要由CSDN通过智能技术生成

简述

实现

依赖包

org.quartz-scheduler

quartz

2.2.3

com.zaxxer

HikariCP-java6

org.quartz-scheduler

quartz-jobs

2.2.3

Quartz配置

SchedulerFactoryBea配置

...

...

Quartz配置quartz.properties文件

#============================================================================

# Configure JobStore

# Using Spring datasource in quartzJobsConfig.xml

# Spring uses LocalDataSourceJobStore extension of JobStoreCMT

#============================================================================

org.quartz.jobStore.useProperties=true

org.quartz.jobStore.tablePrefix = QRTZ_

org.quartz.jobStore.isClustered = true

org.quartz.jobStore.clusterCheckinInterval = 5000

org.quartz.jobStore.misfireThreshold = 60000

org.quartz.jobStore.txIsolationLevelReadCommitted = true

# Change this to match your DB vendor

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate

#============================================================================

# Configure Main Scheduler Properties

# Needed to manage cluster instances

#============================================================================

org.quartz.scheduler.instanceId=AUTO

org.quartz.scheduler.instanceName=MY_CLUSTERED_JOB_SCHEDULER

org.quartz.scheduler.rmi.export = false

org.quartz.scheduler.rmi.proxy = false

#============================================================================

# Configure ThreadPool

#============================================================================

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool

org.quartz.threadPool.threadCount = 10

org.quartz.threadPool.threadPriority = 5

org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

Job数据脚本

CREATE TABLE QRTZ_JOB_DETAILS(

SCHED_NAME VARCHAR2(120) NOT NULL,

JOB_NAME VARCHAR2(200) NOT NULL,

JOB_GROUP VARCHAR2(200) NOT NULL,

DESCRIPTION VARCHAR2(250) NULL,

JOB_CLASS_NAME VARCHAR2(250) NOT NULL,

IS_DURABLE VARCHAR2(1) NOT NULL,

IS_NONCONCURRENT VARCHAR2(1) NOT NULL,

IS_UPDATE_DATA VARCHAR2(1) NOT NULL,

REQUESTS_RECOVERY VARCHAR2(1) NOT NULL,

JOB_DATA BLOB NULL,

CONSTRAINT QRTZ_JOB_DETAILS_PK PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)

);

CREATE TABLE QRTZ_TRIGGERS (

SCHED_NAME VARCHAR2(120) NOT NULL,

TRIGGER_NAME VARCHAR2(200) NOT NULL,

TRIGGER_GROUP VARCHAR2(200) NOT NULL,

JOB_NAME VARCHAR2(200) NOT NULL,

JOB_GROUP VARCHAR2(200) NOT NULL,

DESCRIPTION VARCHAR2(250) NULL,

NEXT_FIRE_TIME NUMBER(13) NULL,

PREV_FIRE_TIME NUMBER(13) NULL,

PRIORITY NUMBER(13) NULL,

TRIGGER_STATE VARCHAR2(16) NOT NULL,

TRIGGER_TYPE VARCHAR2(8) NOT NULL,

START_TIME NUMBER(13) NOT NULL,

END_TIME NUMBER(13) NULL,

CALENDAR_NAME VARCHAR2(200) NULL,

MISFIRE_INSTR NUMBER(2) NULL,

JOB_DATA BLOB NULL,

CONSTRAINT QRTZ_TRIGGERS_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),

CONSTRAINT QRTZ_TRIGGER_TO_JOBS_FK 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 VARCHAR2(120) NOT NULL,

TRIGGER_NAME VARCHAR2(200) NOT NULL,

TRIGGER_GROUP VARCHAR2(200) NOT NULL,

REPEAT_COUNT NUMBER(7) NOT NULL,

REPEAT_INTERVAL NUMBER(12) NOT NULL,

TIMES_TRIGGERED NUMBER(10) NOT NULL,

CONSTRAINT QRTZ_SIMPLE_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),

CONSTRAINT QRTZ_SIMPLE_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)

REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)

);

CREATE TABLE QRTZ_CRON_TRIGGERS (

SCHED_NAME VARCHAR2(120) NOT NULL,

TRIGGER_NAME VARCHAR2(200) NOT NULL,

TRIGGER_GROUP VARCHAR2(200) NOT NULL,

CRON_EXPRESSION VARCHAR2(120) NOT NULL,

TIME_ZONE_ID VARCHAR2(80),

CONSTRAINT QRTZ_CRON_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),

CONSTRAINT QRTZ_CRON_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)

REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)

);

CREATE TABLE QRTZ_SIMPROP_TRIGGERS (

SCHED_NAME VARCHAR2(120) NOT NULL,

TRIGGER_NAME VARCHAR2(200) NOT NULL,

TRIGGER_GROUP VARCHAR2(200) NOT NULL,

STR_PROP_1 VARCHAR2(512) NULL,

STR_PROP_2 VARCHAR2(512) NULL,

STR_PROP_3 VARCHAR2(512) NULL,

INT_PROP_1 NUMBER(10) NULL,

INT_PROP_2 NUMBER(10) NULL,

LONG_PROP_1 NUMBER(13) NULL,

LONG_PROP_2 NUMBER(13) NULL,

DEC_PROP_1 NUMERIC(13,4) NULL,

DEC_PROP_2 NUMERIC(13,4) NULL,

BOOL_PROP_1 VARCHAR2(1) NULL,

BOOL_PROP_2 VARCHAR2(1) NULL,

CONSTRAINT QRTZ_SIMPROP_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),

CONSTRAINT QRTZ_SIMPROP_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)

REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)

);

CREATE TABLE QRTZ_BLOB_TRIGGERS (

SCHED_NAME VARCHAR2(120) NOT NULL,

TRIGGER_NAME VARCHAR2(200) NOT NULL,

TRIGGER_GROUP VARCHAR2(200) NOT NULL,

BLOB_DATA BLOB NULL,

CONSTRAINT QRTZ_BLOB_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),

CONSTRAINT QRTZ_BLOB_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)

REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)

);

CREATE TABLE QRTZ_CALENDARS (

SCHED_NAME VARCHAR2(120) NOT NULL,

CALENDAR_NAME VARCHAR2(200) NOT NULL,

CALENDAR BLOB NOT NULL,

CONSTRAINT QRTZ_CALENDARS_PK PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)

);

CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS(

SCHED_NAME VARCHAR2(120) NOT NULL,

TRIGGER_GROUP VARCHAR2(200) NOT NULL,

CONSTRAINT QRTZ_PAUSED_TRIG_GRPS_PK PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)

);

CREATE TABLE QRTZ_FIRED_TRIGGERS(

SCHED_NAME VARCHAR2(120) NOT NULL,

ENTRY_ID VARCHAR2(95) NOT NULL,

TRIGGER_NAME VARCHAR2(200) NOT NULL,

TRIGGER_GROUP VARCHAR2(200) NOT NULL,

INSTANCE_NAME VARCHAR2(200) NOT NULL,

FIRED_TIME NUMBER(13) NOT NULL,

SCHED_TIME NUMBER(13) NOT NULL,

PRIORITY NUMBER(13) NOT NULL,

STATE VARCHAR2(16) NOT NULL,

JOB_NAME VARCHAR2(200) NULL,

JOB_GROUP VARCHAR2(200) NULL,

IS_NONCONCURRENT VARCHAR2(1) NULL,

REQUESTS_RECOVERY VARCHAR2(1) NULL,

CONSTRAINT QRTZ_FIRED_TRIGGER_PK PRIMARY KEY (SCHED_NAME,ENTRY_ID)

);

CREATE TABLE QRTZ_SCHEDULER_STATE(

SCHED_NAME VARCHAR2(120) NOT NULL,

INSTANCE_NAME VARCHAR2(200) NOT NULL,

LAST_CHECKIN_TIME NUMBER(13) NOT NULL,

CHECKIN_INTERVAL NUMBER(13) NOT NULL,

CONSTRAINT QRTZ_SCHEDULER_STATE_PK PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)

);

CREATE TABLE QRTZ_LOCKS (

SCHED_NAME VARCHAR2(120) NOT NULL,

LOCK_NAME VARCHAR2(40) NOT NULL,

CONSTRAINT QRTZ_LOCKS_PK PRIMARY KEY (SCHED_NAME,LOCK_NAME)

);

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);

原理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值