開源架構Quartz動態添加、修改和刪除定時任務 (二),架構quartz

來源:互聯網
上載者:User

開源架構Quartz動態添加、修改和刪除定時任務 (二),架構quartz

貌似每次回過頭去看之前寫的一些東西,總感覺不是很完美~~雖說不做完美人,但也要做完美事!這次主要是針對Quartz的動態維護和Spring整合,簡單粗暴一點,直接上代碼,有什麼不瞭解留言交流

先來一個定時任務相關準備工作

package com.hupu.timertask;/** * 任務調度類 * @author Joyce.Luo * @date 2015-3-31 下午03:32:04 * @version V3.0 * @since Tomcat6.0,Jdk1.6 * @copyright Copyright (c) 2015 */public class QuartzJob {/** * 任務ID */private Integer jobId;/** * 任務名稱 */private String jobName;/** * 任務分組 */private String jobGroup;/** * 任務狀態 0禁用 1啟用 2刪除 */private Integer jobStatus;/** * 任務已耗用時間運算式 */private String cronExpression;/** * @return the jobId */public Integer getJobId() {return jobId;}/** * @param jobId *            the jobId to set */public void setJobId(Integer jobId) {this.jobId = jobId;}/** * @return the jobName */public String getJobName() {return jobName;}/** * @param jobName *            the jobName to set */public void setJobName(String jobName) {this.jobName = jobName;}/** * @return the jobGroup */public String getJobGroup() {return jobGroup;}/** * @param jobGroup *            the jobGroup to set */public void setJobGroup(String jobGroup) {this.jobGroup = jobGroup;}/** * @return the jobStatus */public Integer getJobStatus() {return jobStatus;}/** * @param jobStatus *            the jobStatus to set */public void setJobStatus(Integer jobStatus) {this.jobStatus = jobStatus;}/** * @return the cronExpression */public String getCronExpression() {return cronExpression;}/** * @param cronExpression *            the cronExpression to set */public void setCronExpression(String cronExpression) {this.cronExpression = cronExpression;}}

定時任務

package com.hupu.timertask;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import org.quartz.CronScheduleBuilder;import org.quartz.CronTrigger;import org.quartz.JobBuilder;import org.quartz.JobDetail;import org.quartz.JobKey;import org.quartz.TriggerBuilder;import org.quartz.TriggerKey;import org.quartz.impl.StdScheduler;/** * 任務調度管理類 * @author Joyce.Luo * @date 2015-3-31 下午03:42:30 * @version V3.0 * @since Tomcat6.0,Jdk1.6 * @copyright Copyright (c) 2015 */public class QuartzManager {private static final Logger logger = LogManager.getLogger(QuartzManager.class.getName());private StdScheduler scheduler;/** * @param scheduler the scheduler to set */public void setScheduler(StdScheduler scheduler) {this.scheduler = scheduler;}/** * 初始化任務調度 * @author Joyce.Luo * @date 2015-3-31 下午03:48:55 * @version V3.0 * @since Tomcat6.0,Jdk1.6 * @copyright Copyright (c) 2015 */@SuppressWarnings("unchecked")public void initJob(QuartzJob job, Class cls){logger.info("初始化任務調度");try {TriggerKey triggerKey = TriggerKey.triggerKey(job.getJobName(), job.getJobGroup());CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);if (null == trigger) {addQuartzJob(job, trigger, cls);}} catch (Exception e) {logger.error("初始化任務調度異常!" + e.getMessage(), e);}}/** * 向任務調度中添加定時任務 * @param job 定時任務資訊 * @param trigger 定時調度觸發器 * @author Joyce.Luo * @date 2015-3-31 下午04:04:58 * @version V3.0 * @since Tomcat6.0,Jdk1.6 * @copyright Copyright (c) 2015 */@SuppressWarnings("unchecked")private void addQuartzJob(QuartzJob job, CronTrigger trigger, Class cls){logger.info("向任務調度中添加定時任務");try {JobDetail jobDetail = JobBuilder.newJob(cls).withIdentity(job.getJobName(), job.getJobGroup()).build();jobDetail.getJobDataMap().put(job.getJobName(), job);CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());trigger = TriggerBuilder.newTrigger().withIdentity(job.getJobName(), job.getJobGroup()).withSchedule(scheduleBuilder).build();scheduler.scheduleJob(jobDetail, trigger);} catch (Exception e) {logger.error("向任務調度中添加定時任務異常!" + e.getMessage(), e);}}/** * 立即運行定時任務 * @param job 定時任務資訊 * @author Joyce.Luo * @date 2015-4-20 下午02:08:41 * @version V3.0 * @since Tomcat6.0,Jdk1.6 * @copyright Copyright (c) 2015 */void runJob(QuartzJob job){logger.info("立即運行任務調度中的定時任務");try {if (null == job) {logger.info("定時任務資訊為空白,無法立即運行");return;}JobKey jobKey = JobKey.jobKey(job.getJobName(), job.getJobGroup());if(null == jobKey){logger.info("任務調度中不存在[" + job.getJobName() + "]定時任務,不予立即運行!");return;}scheduler.triggerJob(jobKey);} catch (Exception e) {logger.error("立即運行任務調度中的定時任務異常!" + e.getMessage(), e);}}/** * 修改任務調度中的定時任務 * @param job 定時任務資訊 * @param triggerKey 定時調度觸發鍵 * @param trigger 定時調度觸發器 * @author Joyce.Luo * @date 2015-3-31 下午04:16:54 * @version V3.0 * @since Tomcat6.0,Jdk1.6 * @copyright Copyright (c) 2015 */void updateQuartzJob(QuartzJob job, TriggerKey triggerKey, CronTrigger trigger){logger.info("修改任務調度中的定時任務");try {if (null == job || null == triggerKey || null == trigger) {logger.info("修改調度任務參數不正常!");return;}logger.info("原始任務運算式:" + trigger.getCronExpression()+ ",現在任務運算式:" + job.getCronExpression());if (trigger.getCronExpression().equals(job.getCronExpression())) {logger.info("任務調度運算式一致,不予進行修改!");return;}logger.info("任務調度運算式不一致,進行修改");CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();scheduler.rescheduleJob(triggerKey, trigger);} catch (Exception e) {logger.error("修改任務調度中的定時任務異常!" + e.getMessage(), e);}}/** * 暫停任務調度中的定時任務 * @param job 定時任務資訊 * @author Joyce.Luo * @date 2015-4-20 下午02:22:53 * @version V3.0 * @since Tomcat6.0,Jdk1.6 * @copyright Copyright (c) 2015 */void pauseJob(QuartzJob job){logger.info("暫停任務調度中的定時任務");try {if (null == job) {logger.info("暫停調度任務參數不正常!");return;}JobKey jobKey = JobKey.jobKey(job.getJobName(), job.getJobGroup());if(null == jobKey){logger.info("任務調度中不存在[" + job.getJobName() + "]定時任務,不予進行暫停!");return;}scheduler.pauseJob(jobKey);} catch (Exception e) {logger.error("暫停任務調度中的定時任務異常!" + e.getMessage(), e);}}/** * 恢複任務調度中的定時任務 * @param job 定時任務資訊 * @author Joyce.Luo * @date 2015-4-20 下午02:26:08 * @version V3.0 * @since Tomcat6.0,Jdk1.6 * @copyright Copyright (c) 2015 */void resumeJob(QuartzJob job){logger.info("恢複任務調度中的定時任務");try {if (null == job) {logger.info("恢複調度任務參數不正常!");return;}JobKey jobKey = JobKey.jobKey(job.getJobName(), job.getJobGroup());if(null == jobKey){logger.info("任務調度中不存在[" + job.getJobName() + "]定時任務,不予進行恢複!");return;}scheduler.resumeJob(jobKey);} catch (Exception e) {logger.error("恢複任務調度中的定時任務異常!" + e.getMessage(), e);}}/** * 刪除任務調度中的定時任務 * @param job 定時任務資訊 * @author Joyce.Luo * @date 2015-3-31 下午04:30:03 * @version V3.0 * @since Tomcat6.0,Jdk1.6 * @copyright Copyright (c) 2015 */void deleteJob(QuartzJob job){logger.info("刪除任務調度中的定時任務");try {if (null == job) {logger.info("刪除調度任務參數不正常!");return;}JobKey jobKey = JobKey.jobKey(job.getJobName(), job.getJobGroup());if(null == jobKey){logger.info("任務調度中不存在[" + job.getJobName() + "]定時任務,不予進行刪除!");return;}scheduler.deleteJob(jobKey);} catch (Exception e) {logger.error("刪除任務調度中的定時任務異常!" + e.getMessage(), e);}}/** * 刪除任務調度定時器 * @param triggerKey * @author Joyce.Luo * @date 2015-3-31 下午04:35:33 * @version V3.0 * @since Tomcat6.0,Jdk1.6 * @copyright Copyright (c) 2015 */void deleteJob(TriggerKey triggerKey){logger.info("刪除任務調度定時器");try {if(null == triggerKey){logger.info("停止任務定時器參數不正常,不予進行停止!");return;}logger.info("停止任務定時器");scheduler.pauseTrigger(triggerKey);scheduler.unscheduleJob(triggerKey);} catch (Exception e) {logger.info("刪除任務調度定時器異常!" + e.getMessage() ,e);}}}

任務調度工廠

package com.hupu.timertask;import java.util.Date;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import com.hupu.util.FormatUtil;/** * 任務調度工廠類 * @author Joyce.Luo * @date 2015-3-31 下午03:38:35 * @version V3.0 * @since Tomcat6.0,Jdk1.6 * @copyright Copyright (c) 2015 */public class QuartzJobFactory implements Job {private static final Logger logger = LogManager.getLogger(QuartzJobFactory.class.getName());@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {QuartzJob scheduleJob = (QuartzJob)context.getMergedJobDataMap().get("backup_job");logger.info("定時任務開始執行,任務名稱[" + scheduleJob.getJobName() + "]");Date previousFireTime = context.getPreviousFireTime();if(null != previousFireTime){logger.info("定時任務上次調度時間:" + FormatUtil.formatDate(previousFireTime));}logger.info("定時任務下次調度時間:" + FormatUtil.formatDate(context.getNextFireTime()));// 執行商務邏輯}}

到這裡代碼基本結束,至於Spring的配置,這個就不用多講了哈~~~

得嘞,簡單的講到這裡吧

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.