SpringBoot 分布式定时任务配置

xiaoxiao2025-08-31  12

    很多时候项目部署是部署多个服务器,那么问题来了,定时任务是不是在每个服务器上都会执行一遍.这不是我们想要的结果.

本配置就解决了这个问题,部署多台服务器,定时任务却不会执行多次,但是需要注意的是这些服务器的时间需要一致,切记,切记.

本人使用框架是springboot

 

需要jar包

<!--分布式定时任务--> <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>

首先有四个工具类(一)

 

package com.eastcom.cdp.sys.config.quartz; import org.quartz.spi.TriggerFiredBundle; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.scheduling.quartz.AdaptableJobFactory; import org.springframework.stereotype.Component; @Component public class JobFactory extends AdaptableJobFactory { @Autowired private AutowireCapableBeanFactory capableBeanFactory; @Override protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception { //调用父类的方法 Object jobInstance = super.createJobInstance(bundle); //进行注入 capableBeanFactory.autowireBean(jobInstance); return jobInstance; } }

(二)

package com.eastcom.cdp.sys.config.quartz; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.impl.StdSchedulerFactory; import org.quartz.spi.JobFactory; import org.quartz.spi.TriggerFiredBundle; import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.quartz.SpringBeanJobFactory; import java.io.IOException; /** * Created by huwj on 2017/2/18. */ @Configuration public class QuartzConfig { @Bean public Scheduler scheduler(@Autowired JobFactory jobFactory) throws IOException, SchedulerException { SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); scheduler.setJobFactory(jobFactory); scheduler.start(); return scheduler; } @Bean public JobFactory JobBeanJobFactory() { JobFactory jobFactory = new JobBeanJobFactory(); return jobFactory; } } class JobBeanJobFactory extends SpringBeanJobFactory implements ApplicationContextAware { private ApplicationContext applicationContext; public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } @Override protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception { Object jobInstance = super.createJobInstance(bundle); //把Job交给Spring来管理,这样Job就能使用由Spring产生的Bean了 applicationContext.getAutowireCapableBeanFactory().autowireBean(jobInstance); return jobInstance; } }

 

(三)

package com.eastcom.cdp.sys.config.quartz; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.PropertiesFactoryBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.quartz.SchedulerFactoryBean; import java.io.IOException; import java.util.Properties; @Configuration @EnableScheduling public class QuartzSchedule { @Autowired private JobFactory myJobFactory; @Bean public SchedulerFactoryBean schedulerFactoryBean() throws IOException { SchedulerFactoryBean factory = new SchedulerFactoryBean(); factory.setOverwriteExistingJobs(true); // 延时启动 factory.setStartupDelay(1); // 加载quartz数据源配置 factory.setQuartzProperties(quartzProperties()); // 自定义Job Factory,用于Spring注入 factory.setJobFactory(myJobFactory); return factory; } /** * 加载quartz数据源配置 * * @return * @throws IOException */ @Bean public Properties quartzProperties() throws IOException { PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean(); propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties")); propertiesFactoryBean.afterPropertiesSet(); return propertiesFactoryBean.getObject(); } }

 

(四)

package com.eastcom.cdp.sys.config.quartz; import lombok.extern.slf4j.Slf4j; import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; import java.util.Date; /** * 创建任务调度,并执行 * @author long * */ @Slf4j public class SchedulerConfig { //创建调度器 public static Scheduler getScheduler() throws SchedulerException { SchedulerFactory schedulerFactory = new StdSchedulerFactory("quartz.properties"); return schedulerFactory.getScheduler(); } /** * 项目启动时初始化定时任务 * @throws SchedulerException */ public void start() throws SchedulerException{ Scheduler scheduler = getScheduler(); scheduler.start(); } public void clear() throws SchedulerException{ Scheduler scheduler = getScheduler(); scheduler.clear(); } /** * 保存定时任务 */ @SuppressWarnings("unchecked") public void addJob(String jobName,String jobGroup,String cronExpression,String jobDescription) throws SchedulerException{ Scheduler scheduler = getScheduler(); System.out.println("---------"+scheduler.getSchedulerName()); Date createTime = new Date(); try { TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup); if (scheduler.checkExists(triggerKey)){ log.info("add job fail, job already exist, jobGroup:{}, jobName:{}", jobGroup, jobName); return; } JobKey jobKey = JobKey.jobKey(jobName, jobGroup); CronScheduleBuilder schedBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing(); CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withDescription(createTime.toLocaleString()).withSchedule(schedBuilder).build(); Class<? extends Job> clazz = (Class<? extends Job>)Class.forName(jobName); JobDetail jobDetail = JobBuilder.newJob(clazz).withIdentity(jobKey).withDescription(jobDescription).build(); scheduler.scheduleJob(jobDetail, trigger); } catch (SchedulerException | ClassNotFoundException e) { e.printStackTrace(); log.error("类名不存在或执行表达式错误,exception:{}",e.getMessage()); } } }

 

配置文件 quartz.properties

#============================================================== #Configure Main Scheduler Properties #============================================================== #��ʱ����ʵ������ͬ��Ŀ��Ҫ���ò�ͬ��ʵ������ org.quartz.scheduler.instanceName = quartzScheduler_sys org.quartz.scheduler.instanceId = AUTO #============================================================== #Configure JobStore #============================================================== org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.tablePrefix = CDP_ZJ.qrtz_ org.quartz.jobStore.isClustered = true org.quartz.jobStore.clusterCheckinInterval = 10000 org.quartz.jobStore.dataSource = myDS #============================================================== #Configure DataSource #============================================================== org.quartz.dataSource.myDS.driver = oracle.jdbc.OracleDriver org.quartz.dataSource.myDS.URL = jdbc:oracle:thin:@192.16.1.18:1521/ipt #org.quartz.dataSource.myDS.URL = jdbc:mysql://192.168.1.191:3306/gocp?useUnicode=true&amp;characterEncoding=UTF-8 org.quartz.dataSource.myDS.user = cdp org.quartz.dataSource.myDS.password = cd3 org.quartz.dataSource.myDS.maxConnections = 30 #============================================================== #Configure ThreadPool #============================================================== org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount = 5 org.quartz.threadPool.threadPriority = 5 org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

 

 

启动项加入

SchedulerConfig mainScheduler = new SchedulerConfig(); mainScheduler.clear(); mainScheduler.addJob("com.eastcom.cdp.sys.schedule.jobs.RemindUserJob","sys","0 * * * * ?","定时器测试");

 

 

定时任务配置(一)

package com.eastcom.cdp.sys.schedule.jobs; import cn.hutool.core.date.DateUtil; import com.eastcom.cdp.sys.schedule.RemindUser; import lombok.extern.slf4j.Slf4j; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * @author Fanhs * @date 2018/9/4 14:45 * @description */ @Slf4j @Component public class RemindUserJob implements Job { @Autowired RemindUser remindUser; @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { remindUser.remindCutoverOperation(); } }

(二)

package com.eastcom.cdp.sys.schedule; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.eastcom.cdp.sys.entity.CutoverPlan; import com.eastcom.cdp.sys.entity.SysMsg; import com.eastcom.cdp.sys.service.CutoverPlanService; import com.eastcom.cdp.sys.service.SysMsgService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; @Service public class RemindUser { @Autowired private CutoverPlanService cutoverPlanService; @Autowired private SysMsgService sysMsgService; /** * 割接申请提醒执行人执行任务 */ public void remindCutoverOperation(){ System.out.println(new Date()); } } }

该配置需要十一张表

Mysql建表语句

# # Quartz seems to work best with the driver mysql-connector-java-5.1.34-bin.jar #  # PLEASE consider using mysql with innodb tables to avoid locking issues # # In your Quartz properties file, you'll need to set  # org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate #   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) );   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) );   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) );   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(200) 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(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) );   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),     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(200) 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(200) 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(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) );   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) );   CREATE TABLE QRTZ_LOCKS   (     SCHED_NAME VARCHAR(120) NOT NULL,     LOCK_NAME  VARCHAR(40) NOT NULL,      PRIMARY KEY (SCHED_NAME,LOCK_NAME) );     commit;   ###如果定时任务比较多,建议增加索引提升速度。   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);    

Oracle建表语句

  delete from qrtz_fired_triggers; delete from qrtz_simple_triggers; delete from qrtz_simprop_triggers; delete from qrtz_cron_triggers; delete from qrtz_blob_triggers; delete from qrtz_triggers; delete from qrtz_job_details; delete from qrtz_calendars; delete from qrtz_paused_trigger_grps; delete from qrtz_locks; delete from qrtz_scheduler_state;       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);  

 

 

转载请注明原文地址: https://www.6miu.com/read-5035541.html

最新回复(0)