博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring集成Quartz定时任务
阅读量:7044 次
发布时间:2019-06-28

本文共 9875 字,大约阅读时间需要 32 分钟。

hot3.png

首先引入jar包

org.quartz-scheduler
quartz
2.2.2
org.quartz-scheduler
quartz-jobs
2.2.2

第二步,创建数据库中需要的表

#  # In your Quartz properties file, you'll need to set   # org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate  #  #  # By: Ron Cordell - roncordell  #  I didn't see this anywhere, so I thought I'd post it here. This is the script from Quartz to create the tables in a MySQL database, modified to use INNODB instead of MYISAM.    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配置文件,quartz.properties

# Default Properties file for use by StdSchedulerFactory# to create a Quartz Scheduler Instance, if a different# properties file is not explicitly specified.#org.quartz.scheduler.instanceName: jscnQuartzSchedulerorg.quartz.scheduler.rmi.export: falseorg.quartz.scheduler.rmi.proxy: falseorg.quartz.scheduler.wrapJobExecutionInUserTransaction: falseorg.quartz.scheduler.skipUpdateCheck: trueorg.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPoolorg.quartz.threadPool.threadCount: 10org.quartz.threadPool.threadPriority: 5org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: trueorg.quartz.jobStore.misfireThreshold: 60000org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreCMTorg.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegateorg.quartz.jobStore.tablePrefix = QRTZ_org.quartz.jobStore.isClustered = trueorg.quartz.jobStore.maxMisfiresToHandleAtATime=1

第四步,在spring-mvc.xml中进行配置(spring-mvc.xml和quartz.properties在同意路径下)

最后,在Controllor中使用

@Controller@RequestMapping(value = "/task")public class TaskController {    private static Logger logger = LoggerFactory.getLogger(TaskController.class);    @Autowired    SchedulerFactoryBean schedulerFactory;    /**     * 启动Job     *      * @param name job名和trigger名     * @param groupName 组名     * @param cron 定时表达式     * @throws Exception     */    @ResponseBody    @RequestMapping(value = "/start", method = RequestMethod.POST)    public void start(String name, String groupName, String cron) throws Exception {        if (StringUtils.isBlank(name)) {            return;        }        if (StringUtils.isBlank(groupName)) {            groupName = PkgConst.DEFAULT_GROUP;        }        logger.info("------- 初始化调度 开始 ---------------");        Scheduler sched = schedulerFactory.getScheduler();        logger.info("------- 初始化调度 完成 -----------");        logger.info("------- 调度-JOB-触发器 启动开始  -------------------");        JobDetail collectInfoJob = JobBuilder.newJob(CollectInfoJob.class).withIdentity(name, groupName).build();        Trigger collectInfoTrigger = TriggerBuilder.newTrigger().withIdentity(name, groupName)                .withSchedule(CronScheduleBuilder.cronSchedule(cron)).build();        sched.scheduleJob(collectInfoJob, collectInfoTrigger);        sched.start();        logger.info("------- 调度-JOB-触发器 启动完成 -----------------");    }}

数据库中的部分内容

232219_3sTC_2968713.png

232247_CFT0_2968713.png

========================================================

以上都是在我的工程中实践过的,可以使用

转载于:https://my.oschina.net/u/2968713/blog/804214

你可能感兴趣的文章
Mac nginx 403
查看>>
Lock接口的实现类
查看>>
结合源码分析 setTimeout / setInterval / setImmediate / process.nextTick 执行时机
查看>>
jQuery 效果 - 淡入淡出
查看>>
3.6 Struts2上传文件
查看>>
MyISAM InnoDB 区别
查看>>
ruby中的inject
查看>>
stringByTrimmingCharactersInSet与stringByReplaci...
查看>>
JavaSE——常用类
查看>>
Mybatis懒加载
查看>>
记录otter遇到问题
查看>>
Java虚拟机详解01----初识JVM
查看>>
神经网络---前馈神经网络
查看>>
离职不容易,自己怎么就这么被玩了呢?
查看>>
我用过的Linux命令
查看>>
Flume-ng 配置channel轮询负载均衡
查看>>
Dubbo基础知识
查看>>
极速发展的饿了么订单系统架构演进
查看>>
SetResBoxState(true,true)页面弹出动画,类似抽屉效果
查看>>
项目管理软件oKit V2.9于12月31日发布
查看>>