Quartz Job scheduling 基础实现代码
生活随笔
收集整理的這篇文章主要介紹了
Quartz Job scheduling 基础实现代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Quartz 集成在 SpringBoot 中分為 config、task、utils、controller 和 MVC 的三層即 controller、service、dao 和 entity。
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 基础实现代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET MVC3 中的AJAX
- 下一篇: PHP多线程的实现(PHP多线程类)