Quartz 集成在 SpringBoot 中分为 configtaskutilscontroller 和 MVC 的三层即 controllerservicedaoentity

config

package com.romition.modules.job.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;import javax.sql.DataSource;
import java.util.Properties;/*** 定时任务配置*/
@Configuration
public class ScheduleConfig {@Beanpublic SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) {SchedulerFactoryBean factory = new SchedulerFactoryBean();factory.setDataSource(dataSource);//quartz参数Properties prop = new Properties();prop.put("org.quartz.scheduler.instanceName", "ProjectScheduler");prop.put("org.quartz.scheduler.instanceId", "AUTO");//线程池配置prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");prop.put("org.quartz.threadPool.threadCount", "20");prop.put("org.quartz.threadPool.threadPriority", "5");//JobStore配置prop.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX");//集群配置prop.put("org.quartz.jobStore.isClustered", "true");prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000");prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1");prop.put("org.quartz.jobStore.misfireThreshold", "12000");prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_");prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?");//PostgreSQL数据库,需要打开此注释//prop.put("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.PostgreSQLDelegate");factory.setQuartzProperties(prop);factory.setSchedulerName("ProjectScheduler");//延时启动factory.setStartupDelay(30);factory.setApplicationContextSchedulerContextKey("applicationContextKey");//可选,QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了factory.setOverwriteExistingJobs(true);//设置自动启动,默认为truefactory.setAutoStartup(true);return factory;}
}

task

package com.romition.modules.job.task;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;/*** 定时任务*/
@Component("quartzTask")
public class quartzTask {private Logger logger = LoggerFactory.getLogger(getClass());public void test(String params){logger.info("我是带参数的test3方法,正在被执行,参数为:" + params);}}

task 里面将运行具体的定时任务业务代码,需要将定时任务的 Class 名称和 Method 名称存入数据库中,并指定 corn 表达式来指定运行周期。

utils

package com.romition.modules.job.utils;import com.romition.common.utils.SpringContextUtils;
import com.romition.modules.job.entity.ScheduleJobEntity;
import com.romition.modules.job.entity.ScheduleJobLogEntity;
import com.romition.modules.job.service.ScheduleJobLogService;
import org.apache.commons.lang.StringUtils;
import org.quartz.JobExecutionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.quartz.QuartzJobBean;import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;/*** 定时任务*/
public class ScheduleJob extends QuartzJobBean {private Logger logger = LoggerFactory.getLogger(getClass());private ExecutorService service = Executors.newSingleThreadExecutor();@Overrideprotected void executeInternal(JobExecutionContext context) {ScheduleJobEntity scheduleJob = (ScheduleJobEntity) context.getMergedJobDataMap().get(ScheduleJobEntity.JOB_PARAM_KEY);//获取spring beanScheduleJobLogService scheduleJobLogService = (ScheduleJobLogService) SpringContextUtils.getBean("scheduleJobLogService");//数据库保存执行记录ScheduleJobLogEntity log = new ScheduleJobLogEntity();log.setJobId(scheduleJob.getJobId());log.setBeanName(scheduleJob.getBeanName());log.setMethodName(scheduleJob.getMethodName());log.setParams(scheduleJob.getParams());log.setCreateTime(new Date());//任务开始时间long startTime = System.currentTimeMillis();try {//执行任务logger.info("任务准备执行,任务ID:" + scheduleJob.getJobId());ScheduleRunnable task = new ScheduleRunnable(scheduleJob.getBeanName(),scheduleJob.getMethodName(), scheduleJob.getParams());Future<?> future = service.submit(task);future.get();//任务执行总时长long times = System.currentTimeMillis() - startTime;log.setTimes((int)times);//任务状态    0:成功    1:失败log.setStatus(0);logger.info("任务执行完毕,任务ID:" + scheduleJob.getJobId() + "  总共耗时:" + times + "毫秒");} catch (Exception e) {logger.error("任务执行失败,任务ID:" + scheduleJob.getJobId(), e);//任务执行总时长long times = System.currentTimeMillis() - startTime;log.setTimes((int)times);//任务状态    0:成功    1:失败log.setStatus(1);log.setError(StringUtils.substring(e.toString(), 0, 2000));}finally {scheduleJobLogService.insert(log);}}
}
package com.romition.modules.job.utils;import com.romition.common.exception.RRException;
import com.romition.common.utils.SpringContextUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.util.ReflectionUtils;import java.lang.reflect.Method;/*** 执行定时任务*/
public class ScheduleRunnable implements Runnable {private Object target;private Method method;private String params;public ScheduleRunnable(String beanName, String methodName, String params) throws NoSuchMethodException, SecurityException {this.target = SpringContextUtils.getBean(beanName);this.params = params;if(StringUtils.isNotBlank(params)){this.method = target.getClass().getDeclaredMethod(methodName, String.class);}else{this.method = target.getClass().getDeclaredMethod(methodName);}}@Overridepublic void run() {try {ReflectionUtils.makeAccessible(method);if(StringUtils.isNotBlank(params)){method.invoke(target, params);}else{method.invoke(target);}}catch (Exception e) {throw new RRException("执行定时任务失败", e);}}}
package com.romition.modules.job.utils;import com.romition.common.exception.RRException;
import com.romition.common.utils.Constant;
import com.romition.modules.job.entity.ScheduleJobEntity;
import org.quartz.*;/*** 定时任务工具类*/
public class ScheduleUtils {private final static String JOB_NAME = "TASK_";/*** 获取触发器key*/public static TriggerKey getTriggerKey(Long jobId) {return TriggerKey.triggerKey(JOB_NAME + jobId);}/*** 获取jobKey*/public static JobKey getJobKey(Long jobId) {return JobKey.jobKey(JOB_NAME + jobId);}/*** 获取表达式触发器*/public static CronTrigger getCronTrigger(Scheduler scheduler, Long jobId) {try {return (CronTrigger) scheduler.getTrigger(getTriggerKey(jobId));} catch (SchedulerException e) {throw new RRException("获取定时任务CronTrigger出现异常", e);}}/*** 创建定时任务*/public static void createScheduleJob(Scheduler scheduler, ScheduleJobEntity scheduleJob) {try {//构建job信息JobDetail jobDetail = JobBuilder.newJob(ScheduleJob.class).withIdentity(getJobKey(scheduleJob.getJobId())).build();//表达式调度构建器CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression()).withMisfireHandlingInstructionDoNothing();//按新的cronExpression表达式构建一个新的triggerCronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getTriggerKey(scheduleJob.getJobId())).withSchedule(scheduleBuilder).build();//放入参数,运行时的方法可以获取jobDetail.getJobDataMap().put(ScheduleJobEntity.JOB_PARAM_KEY, scheduleJob);scheduler.scheduleJob(jobDetail, trigger);//暂停任务if(scheduleJob.getStatus() == Constant.ScheduleStatus.PAUSE.getValue()){pauseJob(scheduler, scheduleJob.getJobId());}} catch (SchedulerException e) {throw new RRException("创建定时任务失败", e);}}/*** 更新定时任务*/public static void updateScheduleJob(Scheduler scheduler, ScheduleJobEntity scheduleJob) {try {TriggerKey triggerKey = getTriggerKey(scheduleJob.getJobId());//表达式调度构建器CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression()).withMisfireHandlingInstructionDoNothing();CronTrigger trigger = getCronTrigger(scheduler, scheduleJob.getJobId());//按新的cronExpression表达式重新构建triggertrigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();//参数trigger.getJobDataMap().put(ScheduleJobEntity.JOB_PARAM_KEY, scheduleJob);scheduler.rescheduleJob(triggerKey, trigger);//暂停任务if(scheduleJob.getStatus() == Constant.ScheduleStatus.PAUSE.getValue()){pauseJob(scheduler, scheduleJob.getJobId());}} catch (SchedulerException e) {throw new RRException("更新定时任务失败", e);}}/*** 立即执行任务*/public static void run(Scheduler scheduler, ScheduleJobEntity scheduleJob) {try {//参数JobDataMap dataMap = new JobDataMap();dataMap.put(ScheduleJobEntity.JOB_PARAM_KEY, scheduleJob);scheduler.triggerJob(getJobKey(scheduleJob.getJobId()), dataMap);} catch (SchedulerException e) {throw new RRException("立即执行定时任务失败", e);}}/*** 暂停任务*/public static void pauseJob(Scheduler scheduler, Long jobId) {try {scheduler.pauseJob(getJobKey(jobId));} catch (SchedulerException e) {throw new RRException("暂停定时任务失败", e);}}/*** 恢复任务*/public static void resumeJob(Scheduler scheduler, Long jobId) {try {scheduler.resumeJob(getJobKey(jobId));} catch (SchedulerException e) {throw new RRException("暂停定时任务失败", e);}}/*** 删除定时任务*/public static void deleteScheduleJob(Scheduler scheduler, Long jobId) {try {scheduler.deleteJob(getJobKey(jobId));} catch (SchedulerException e) {throw new RRException("删除定时任务失败", e);}}
}

MVC 部分


package com.romition.modules.job.entity;import java.io.Serializable;
import java.util.Date;/*** 定时任务*/
public class ScheduleJobEntity implements Serializable {private static final long serialVersionUID = 1L;/*** 任务调度参数key*/public static final String JOB_PARAM_KEY = "JOB_PARAM_KEY";/*** 任务id*/private Long jobId;/*** spring bean名称*/private String beanName;/*** 方法名*/private String methodName;/*** 参数*/private String params;/*** cron表达式*/private String cronExpression;/*** 任务状态*/private Integer status;/*** 备注*/private String remark;/*** 创建时间*/private Date createTime;}

实体主要用于和数据库进行交互,记录具体的 job 。

package com.romition.modules.job.service.impl;import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.romition.common.utils.Constant;
import com.romition.common.utils.PageUtils;
import com.romition.common.utils.Query;
import com.romition.modules.job.dao.ScheduleJobDao;
import com.romition.modules.job.entity.ScheduleJobEntity;
import com.romition.modules.job.service.ScheduleJobService;
import com.romition.modules.job.utils.ScheduleUtils;
import org.apache.commons.lang.StringUtils;
import org.quartz.CronTrigger;
import org.quartz.Scheduler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import javax.annotation.PostConstruct;
import java.util.*;@Service("scheduleJobService")
public class ScheduleJobServiceImpl extends ServiceImpl<ScheduleJobDao, ScheduleJobEntity> implements ScheduleJobService {@Autowiredprivate Scheduler scheduler;/*** 项目启动时,初始化定时器*/@PostConstructpublic void init(){List<ScheduleJobEntity> scheduleJobList = this.selectList(null);for(ScheduleJobEntity scheduleJob : scheduleJobList){CronTrigger cronTrigger = ScheduleUtils.getCronTrigger(scheduler, scheduleJob.getJobId());//如果不存在,则创建if(cronTrigger == null) {ScheduleUtils.createScheduleJob(scheduler, scheduleJob);}else {ScheduleUtils.updateScheduleJob(scheduler, scheduleJob);}}}@Overridepublic PageUtils queryPage(Map<String, Object> params) {String beanName = (String)params.get("beanName");Page<ScheduleJobEntity> page = this.selectPage(new Query<ScheduleJobEntity>(params).getPage(),new EntityWrapper<ScheduleJobEntity>().like(StringUtils.isNotBlank(beanName),"bean_name", beanName));return new PageUtils(page);}@Override@Transactional(rollbackFor = Exception.class)public void save(ScheduleJobEntity scheduleJob) {scheduleJob.setCreateTime(new Date());scheduleJob.setStatus(Constant.ScheduleStatus.NORMAL.getValue());this.insert(scheduleJob);ScheduleUtils.createScheduleJob(scheduler, scheduleJob);}@Override@Transactional(rollbackFor = Exception.class)public void update(ScheduleJobEntity scheduleJob) {ScheduleUtils.updateScheduleJob(scheduler, scheduleJob);this.updateById(scheduleJob);}@Override@Transactional(rollbackFor = Exception.class)public void deleteBatch(Long[] jobIds) {for(Long jobId : jobIds){ScheduleUtils.deleteScheduleJob(scheduler, jobId);}//删除数据this.deleteBatchIds(Arrays.asList(jobIds));}@Overridepublic int updateBatch(Long[] jobIds, int status){Map<String, Object> map = new HashMap<>();map.put("list", jobIds);map.put("status", status);return baseMapper.updateBatch(map);}@Override@Transactional(rollbackFor = Exception.class)public void run(Long[] jobIds) {for(Long jobId : jobIds){ScheduleUtils.run(scheduler, this.selectById(jobId));}}@Override@Transactional(rollbackFor = Exception.class)public void pause(Long[] jobIds) {for(Long jobId : jobIds){ScheduleUtils.pauseJob(scheduler, jobId);}updateBatch(jobIds, Constant.ScheduleStatus.PAUSE.getValue());}@Override@Transactional(rollbackFor = Exception.class)public void resume(Long[] jobIds) {for(Long jobId : jobIds){ScheduleUtils.resumeJob(scheduler, jobId);}updateBatch(jobIds, Constant.ScheduleStatus.NORMAL.getValue());}}

scheduleJobService 实现了对 job 的增删改查等操作,并且在 Spring 容器初始化的时候对 job 进行创建或更新。

数据库

/*Navicat MySQL Data TransferSource Server         : localhostSource Server Type    : MySQLSource Server Version : 50639Source Host           : localhost:3306Source Schema         : romition_projectTarget Server Type    : MySQLTarget Server Version : 50639File Encoding         : 65001Date: 23/07/2018 14:04:55
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for qrtz_blob_triggers
-- ----------------------------
DROP TABLE IF EXISTS `qrtz_blob_triggers`;
CREATE TABLE `qrtz_blob_triggers`  (`SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`TRIGGER_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`TRIGGER_GROUP` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`BLOB_DATA` blob NULL,PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,INDEX `SCHED_NAME`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Table structure for qrtz_calendars
-- ----------------------------
DROP TABLE IF EXISTS `qrtz_calendars`;
CREATE TABLE `qrtz_calendars`  (`SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`CALENDAR_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`CALENDAR` blob NOT NULL,PRIMARY KEY (`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Table structure for qrtz_cron_triggers
-- ----------------------------
DROP TABLE IF EXISTS `qrtz_cron_triggers`;
CREATE TABLE `qrtz_cron_triggers`  (`SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`TRIGGER_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`TRIGGER_GROUP` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`CRON_EXPRESSION` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`TIME_ZONE_ID` varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,CONSTRAINT `qrtz_cron_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Table structure for qrtz_fired_triggers
-- ----------------------------
DROP TABLE IF EXISTS `qrtz_fired_triggers`;
CREATE TABLE `qrtz_fired_triggers`  (`SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`ENTRY_ID` varchar(95) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`TRIGGER_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`TRIGGER_GROUP` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`INSTANCE_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`FIRED_TIME` bigint(13) NOT NULL,`SCHED_TIME` bigint(13) NOT NULL,`PRIORITY` int(11) NOT NULL,`STATE` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`JOB_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`JOB_GROUP` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`SCHED_NAME`, `ENTRY_ID`) USING BTREE,INDEX `IDX_QRTZ_FT_TRIG_INST_NAME`(`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE,INDEX `IDX_QRTZ_FT_INST_JOB_REQ_RCVRY`(`SCHED_NAME`, `INSTANCE_NAME`, `REQUESTS_RECOVERY`) USING BTREE,INDEX `IDX_QRTZ_FT_J_G`(`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE,INDEX `IDX_QRTZ_FT_JG`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE,INDEX `IDX_QRTZ_FT_T_G`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,INDEX `IDX_QRTZ_FT_TG`(`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Table structure for qrtz_job_details
-- ----------------------------
DROP TABLE IF EXISTS `qrtz_job_details`;
CREATE TABLE `qrtz_job_details`  (`SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`JOB_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`JOB_GROUP` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`DESCRIPTION` varchar(250) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`JOB_CLASS_NAME` varchar(250) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`IS_DURABLE` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`IS_UPDATE_DATA` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`JOB_DATA` blob NULL,PRIMARY KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE,INDEX `IDX_QRTZ_J_REQ_RECOVERY`(`SCHED_NAME`, `REQUESTS_RECOVERY`) USING BTREE,INDEX `IDX_QRTZ_J_GRP`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Table structure for qrtz_locks
-- ----------------------------
DROP TABLE IF EXISTS `qrtz_locks`;
CREATE TABLE `qrtz_locks`  (`SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`LOCK_NAME` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,PRIMARY KEY (`SCHED_NAME`, `LOCK_NAME`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Table structure for qrtz_paused_trigger_grps
-- ----------------------------
DROP TABLE IF EXISTS `qrtz_paused_trigger_grps`;
CREATE TABLE `qrtz_paused_trigger_grps`  (`SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`TRIGGER_GROUP` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,PRIMARY KEY (`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Table structure for qrtz_scheduler_state
-- ----------------------------
DROP TABLE IF EXISTS `qrtz_scheduler_state`;
CREATE TABLE `qrtz_scheduler_state`  (`SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`INSTANCE_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`LAST_CHECKIN_TIME` bigint(13) NOT NULL,`CHECKIN_INTERVAL` bigint(13) NOT NULL,PRIMARY KEY (`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Table structure for qrtz_simple_triggers
-- ----------------------------
DROP TABLE IF EXISTS `qrtz_simple_triggers`;
CREATE TABLE `qrtz_simple_triggers`  (`SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`TRIGGER_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`TRIGGER_GROUP` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci 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`) USING BTREE,CONSTRAINT `qrtz_simple_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Table structure for qrtz_simprop_triggers
-- ----------------------------
DROP TABLE IF EXISTS `qrtz_simprop_triggers`;
CREATE TABLE `qrtz_simprop_triggers`  (`SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`TRIGGER_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`TRIGGER_GROUP` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`STR_PROP_1` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`STR_PROP_2` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`STR_PROP_3` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`INT_PROP_1` int(11) NULL DEFAULT NULL,`INT_PROP_2` int(11) NULL DEFAULT NULL,`LONG_PROP_1` bigint(20) NULL DEFAULT NULL,`LONG_PROP_2` bigint(20) NULL DEFAULT NULL,`DEC_PROP_1` decimal(13, 4) NULL DEFAULT NULL,`DEC_PROP_2` decimal(13, 4) NULL DEFAULT NULL,`BOOL_PROP_1` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`BOOL_PROP_2` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,CONSTRAINT `qrtz_simprop_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Table structure for qrtz_triggers
-- ----------------------------
DROP TABLE IF EXISTS `qrtz_triggers`;
CREATE TABLE `qrtz_triggers`  (`SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`TRIGGER_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`TRIGGER_GROUP` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`JOB_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`JOB_GROUP` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`DESCRIPTION` varchar(250) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`NEXT_FIRE_TIME` bigint(13) NULL DEFAULT NULL,`PREV_FIRE_TIME` bigint(13) NULL DEFAULT NULL,`PRIORITY` int(11) NULL DEFAULT NULL,`TRIGGER_STATE` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`TRIGGER_TYPE` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`START_TIME` bigint(13) NOT NULL,`END_TIME` bigint(13) NULL DEFAULT NULL,`CALENDAR_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`MISFIRE_INSTR` smallint(2) NULL DEFAULT NULL,`JOB_DATA` blob NULL,PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,INDEX `IDX_QRTZ_T_J`(`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE,INDEX `IDX_QRTZ_T_JG`(`SCHED_NAME`, `JOB_GROUP`) USING BTREE,INDEX `IDX_QRTZ_T_C`(`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE,INDEX `IDX_QRTZ_T_G`(`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE,INDEX `IDX_QRTZ_T_STATE`(`SCHED_NAME`, `TRIGGER_STATE`) USING BTREE,INDEX `IDX_QRTZ_T_N_STATE`(`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE,INDEX `IDX_QRTZ_T_N_G_STATE`(`SCHED_NAME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE,INDEX `IDX_QRTZ_T_NEXT_FIRE_TIME`(`SCHED_NAME`, `NEXT_FIRE_TIME`) USING BTREE,INDEX `IDX_QRTZ_T_NFT_ST`(`SCHED_NAME`, `TRIGGER_STATE`, `NEXT_FIRE_TIME`) USING BTREE,INDEX `IDX_QRTZ_T_NFT_MISFIRE`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`) USING BTREE,INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`, `TRIGGER_STATE`) USING BTREE,INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE_GRP`(`SCHED_NAME`, `MISFIRE_INSTR`, `NEXT_FIRE_TIME`, `TRIGGER_GROUP`, `TRIGGER_STATE`) USING BTREE,CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Table structure for schedule_job
-- ----------------------------
DROP TABLE IF EXISTS `schedule_job`;
CREATE TABLE `schedule_job`  (`job_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '任务id',`bean_name` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'spring bean名称',`method_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '方法名',`params` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '参数',`cron_expression` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'cron表达式',`status` tinyint(4) NULL DEFAULT NULL COMMENT '任务状态  0:正常  1:暂停',`remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',PRIMARY KEY (`job_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '定时任务' ROW_FORMAT = Compact;-- ----------------------------
-- Table structure for schedule_job_log
-- ----------------------------
DROP TABLE IF EXISTS `schedule_job_log`;
CREATE TABLE `schedule_job_log`  (`log_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '任务日志id',`job_id` bigint(20) NOT NULL COMMENT '任务id',`bean_name` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'spring bean名称',`method_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '方法名',`params` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '参数',`status` tinyint(4) NOT NULL COMMENT '任务状态    0:成功    1:失败',`error` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '失败信息',`times` int(11) NOT NULL COMMENT '耗时(单位:毫秒)',`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',PRIMARY KEY (`log_id`) USING BTREE,INDEX `job_id`(`job_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '定时任务日志' ROW_FORMAT = Compact;

本文由个人 hexo 博客 co2fe.com 迁移
date: 2018-08-08 20:57:56

转载于:https://www.cnblogs.com/manastudent/p/10190992.html

Quartz Job scheduling 基础实现代码相关推荐

  1. C基础——目标代码文件、可执行文件和库

    目标代码文件.可执行文件和库 C编程的基本策略是使用程序将源代码文件转换为可执行文件,此文件包含可以运行的机器语言代码.C分两步完成这一工作:编译和链接.编译器将源代码转换为中间代码,链接器将此中间代 ...

  2. Java基础之代码执行顺序深入解析

    Java基础之代码执行顺序深入解析 结合实例代码分析: public class demo6 {public static void main(String[] args) {new Son();Sy ...

  3. 非专业计算机考试基础内容,全国高等教育自学考试指定教材:计算机应用基础·非计算机专业公共基础科·代码00018...

    &nbsp&nbsp[导读]:全国高等教育自学考试指定教材:计算机应用基础·非计算机专业公共基础科·代码00018,更多自学考试内容.模拟试题和历年真题,请访问易考吧自学考试网(htt ...

  4. java class文件 代码_java_基础——用代码编译.java文件+加载class文件

    java_基础--用代码编译.java文件+加载class文件 java_基础--用代码编译.java文件+加载class文件 [简单编译的流程] package com.zjm.www.test; ...

  5. html颜色叠加代码,html代码大全(基础使用代码)(颜色代码完整版)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 您在使用以下基础使用代码时请把{}换成<>!!!) (这样这个命令才成立!!!) 基础使用代码: 1)贴图:{img src="图片 ...

  6. antd 判断input输入内容是否大于_Python基础语法 | 代码规范amp;判断语句amp;循环语句...

    Python基础语法 代码的执行顺序 从上到下 从左到右 代码规范 模块名,包名,普通数据量一般小写字母,多个单词之间用 _ 连接 不要用系统定义的名称,具有特殊意义的表示符,如:doc,txt之类的 ...

  7. python语句块规范_Python基础语法——代码规范判断语句循环语句

    Python基础语法 代码的执行顺序从上到下 从左到右 代码规范模块名,包名,普通数据量一般小写字母,多个单词之间用 _ 连接 不要用系统定义的名称,具有特殊意义的表示符,如:doc,txt之类的 每 ...

  8. HTML5基础之代码入门

    HTML5基础之代码入门 2016-11-12 15:24 515人阅读 评论(0) 收藏 举报 分类: HTML & HTML5(13) 作者同类文章 X 版权声明:本文为博主原创文章,如需 ...

  9. java小基础之代码块的霸道

    java小基础之代码块的霸道 1.介绍: 代码块的分类:{} 1.局部代码块:限制代码的作用域 书写位置:在方法中 霸道理由:比方法中的程序先一步被调用 2.构造代码块:在类中方法外, 霸道理由:如果 ...

最新文章

  1. 阿里120页PPT诠释国家“智能+”战略
  2. HDU4607(求树中的最长链)
  3. 万级K8s集群背后etcd稳定性及性能优化实践
  4. Voltage Keepsake CodeForces - 801C (思维+二分)
  5. toastutils报错_史上最好用的Android全量版本更新库XUpdate使用指南
  6. CDH kerberos 认证,安全认证
  7. mysql没有group by_MySQL:不在GROUP BY中
  8. iconv的用法,'GBK'转'utf-8'
  9. 在dropdownlist中使用enum
  10. ajaxSubmit()上传
  11. ABAQUS单位统一
  12. Vue 拖拽缩放组件 vue-drag-resize属性
  13. 第5节 服务器系统简介及用户和组管理
  14. 架构设计:系统间通信(36)——Apache Camel快速入门(上)
  15. Open judge 1.8.3
  16. Linux驱动学习笔记之触摸屏驱动
  17. 杭州电子科技大学acm--2000
  18. 软件测试方法_等价类划分法
  19. web自动化测试基础知识整合(一)
  20. IP地址与MAC地址的渊源

热门文章

  1. SAP Cloud for Customer interaction center 呼叫中心集成
  2. 如何禁止SAP Fiorigateway系统上的病毒扫描
  3. SAP UI5框架中,onInit方法执行次数的讨论
  4. 如何处理Docker的错误消息request canceled:Docker代理问题
  5. 最简单的教程:在Ubuntu操作系统里安装Docker
  6. 乾坤大挪移:SAP CRM WebClient UI 和 SAP Fiori UI 混搭并存
  7. Jerry的WebClient UI 42篇原创文章合集
  8. 从零开始学计算机组装与维修技术,从新手到高手:电脑组装、维护与故障排除...
  9. mysql is null走索引_Mysql数据库索引IS NUll ,IS NOT NUll ,!= 是否走索引
  10. 有一个包含主函数的java类_重新认识Java中的程序入口即主函数各组成部分