日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

任务调度开源框架Quartz动态添加、修改和删除定时任务

發(fā)布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 任务调度开源框架Quartz动态添加、修改和删除定时任务 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  Quartz 是個開源的作業(yè)調(diào)度框架,為在 Java 應(yīng)用程序中進行作業(yè)調(diào)度提供了簡單卻強大的機制。Quartz框架包含了調(diào)度器監(jiān)聽、作業(yè)和觸發(fā)器監(jiān)聽。你可以配置作業(yè)和觸發(fā)器監(jiān)聽為全局監(jiān)聽或者是特定于作業(yè)和觸發(fā)器的監(jiān)聽。Quartz 允許開發(fā)人員根據(jù)時間間隔(或天)來調(diào)度作業(yè)。它實現(xiàn)了作業(yè)和觸發(fā)器的多對多關(guān)系,還能把多個作業(yè)與不同的觸發(fā)器關(guān)聯(lián)。整合了 Quartz 的應(yīng)用程序可以重用來自不同事件的作業(yè),還可以為一個事件組合多個作業(yè)。并且還能和Spring配置整合使用。Quartz在功能上遠遠超越了JDK自帶的Timer,很好很強大!好啦,直接上代碼:

/** * @Description: * * @Title: QuartzManager.java * @Package com.joyce.quartz * @Copyright: Copyright (c) 2014 * * @version V2.0 */ import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.impl.StdSchedulerFactory; /** * @Description: 定時任務(wù)管理類 * * @ClassName: QuartzManager * @Copyright: Copyright (c) 2014 * * @author Comsys-LZP * @date 2014-6-26 下午03:15:52 * @version V2.0 */ public class QuartzManager { private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory(); private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME"; private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME"; /** * @Description: 添加一個定時任務(wù),使用默認的任務(wù)組名,觸發(fā)器名,觸發(fā)器組名 * * @param jobName * 任務(wù)名 * @param cls * 任務(wù) * @param time * 時間設(shè)置,參考quartz說明文檔 * * @Title: QuartzManager.java * @Copyright: Copyright (c) 2014 * * @author Comsys-LZP * @date 2014-6-26 下午03:47:44 * @version V2.0 */ @SuppressWarnings("unchecked") public static void addJob(String jobName, Class cls, String time) { try { Scheduler sched = gSchedulerFactory.getScheduler(); JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, cls);// 任務(wù)名,任務(wù)組,任務(wù)執(zhí)行類 // 觸發(fā)器 CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);// 觸發(fā)器名,觸發(fā)器組 trigger.setCronExpression(time);// 觸發(fā)器時間設(shè)定 sched.scheduleJob(jobDetail, trigger); // 啟動 if (!sched.isShutdown()) { sched.start(); } } catch (Exception e) { throw new RuntimeException(e); } } /** * @Description: 添加一個定時任務(wù) * * @param jobName * 任務(wù)名 * @param jobGroupName * 任務(wù)組名 * @param triggerName * 觸發(fā)器名 * @param triggerGroupName * 觸發(fā)器組名 * @param jobClass * 任務(wù) * @param time * 時間設(shè)置,參考quartz說明文檔 * * @Title: QuartzManager.java * @Copyright: Copyright (c) 2014 * * @author Comsys-LZP * @date 2014-6-26 下午03:48:15 * @version V2.0 */ @SuppressWarnings("unchecked") public static void addJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName, Class jobClass, String time) { try { Scheduler sched = gSchedulerFactory.getScheduler(); JobDetail jobDetail = new JobDetail(jobName, jobGroupName, jobClass);// 任務(wù)名,任務(wù)組,任務(wù)執(zhí)行類 // 觸發(fā)器 CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);// 觸發(fā)器名,觸發(fā)器組 trigger.setCronExpression(time);// 觸發(fā)器時間設(shè)定 sched.scheduleJob(jobDetail, trigger); } catch (Exception e) { throw new RuntimeException(e); } } /** * @Description: 修改一個任務(wù)的觸發(fā)時間(使用默認的任務(wù)組名,觸發(fā)器名,觸發(fā)器組名) * * @param jobName * @param time * * @Title: QuartzManager.java * @Copyright: Copyright (c) 2014 * * @author Comsys-LZP * @date 2014-6-26 下午03:49:21 * @version V2.0 */ @SuppressWarnings("unchecked") public static void modifyJobTime(String jobName, String time) { try { Scheduler sched = gSchedulerFactory.getScheduler(); CronTrigger trigger = (CronTrigger) sched.getTrigger(jobName,TRIGGER_GROUP_NAME); if (trigger == null) { return; } String oldTime = trigger.getCronExpression(); if (!oldTime.equalsIgnoreCase(time)) { JobDetail jobDetail = sched.getJobDetail(jobName,JOB_GROUP_NAME); Class objJobClass = jobDetail.getJobClass(); removeJob(jobName); addJob(jobName, objJobClass, time); } } catch (Exception e) { throw new RuntimeException(e); } } /** * @Description: 修改一個任務(wù)的觸發(fā)時間 * * @param triggerName * @param triggerGroupName * @param time * * @Title: QuartzManager.java * @Copyright: Copyright (c) 2014 * * @author Comsys-LZP * @date 2014-6-26 下午03:49:37 * @version V2.0 */ public static void modifyJobTime(String triggerName, String triggerGroupName, String time) { try { Scheduler sched = gSchedulerFactory.getScheduler(); CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerName,triggerGroupName); if (trigger == null) { return; } String oldTime = trigger.getCronExpression(); if (!oldTime.equalsIgnoreCase(time)) { CronTrigger ct = (CronTrigger) trigger; // 修改時間 ct.setCronExpression(time); // 重啟觸發(fā)器 sched.resumeTrigger(triggerName, triggerGroupName); } } catch (Exception e) { throw new RuntimeException(e); } } /** * @Description: 移除一個任務(wù)(使用默認的任務(wù)組名,觸發(fā)器名,觸發(fā)器組名) * * @param jobName * * @Title: QuartzManager.java * @Copyright: Copyright (c) 2014 * * @author Comsys-LZP * @date 2014-6-26 下午03:49:51 * @version V2.0 */ public static void removeJob(String jobName) { try { Scheduler sched = gSchedulerFactory.getScheduler(); sched.pauseTrigger(jobName, TRIGGER_GROUP_NAME);// 停止觸發(fā)器 sched.unscheduleJob(jobName, TRIGGER_GROUP_NAME);// 移除觸發(fā)器 sched.deleteJob(jobName, JOB_GROUP_NAME);// 刪除任務(wù) } catch (Exception e) { throw new RuntimeException(e); } } /** * @Description: 移除一個任務(wù) * * @param jobName * @param jobGroupName * @param triggerName * @param triggerGroupName * * @Title: QuartzManager.java * @Copyright: Copyright (c) 2014 * * @author Comsys-LZP * @date 2014-6-26 下午03:50:01 * @version V2.0 */ public static void removeJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName) { try { Scheduler sched = gSchedulerFactory.getScheduler(); sched.pauseTrigger(triggerName, triggerGroupName);// 停止觸發(fā)器 sched.unscheduleJob(triggerName, triggerGroupName);// 移除觸發(fā)器 sched.deleteJob(jobName, jobGroupName);// 刪除任務(wù) } catch (Exception e) { throw new RuntimeException(e); } } /** * @Description:啟動所有定時任務(wù) * * * @Title: QuartzManager.java * @Copyright: Copyright (c) 2014 * * @author Comsys-LZP * @date 2014-6-26 下午03:50:18 * @version V2.0 */ public static void startJobs() { try { Scheduler sched = gSchedulerFactory.getScheduler(); sched.start(); } catch (Exception e) { throw new RuntimeException(e); } } /** * @Description:關(guān)閉所有定時任務(wù) * * * @Title: QuartzManager.java * @Copyright: Copyright (c) 2014 * * @author Comsys-LZP * @date 2014-6-26 下午03:50:26 * @version V2.0 */ public static void shutdownJobs() { try { Scheduler sched = gSchedulerFactory.getScheduler(); if (!sched.isShutdown()) { sched.shutdown(); } } catch (Exception e) { throw new RuntimeException(e); } } }

以上就是quartz任務(wù)調(diào)度對于任務(wù)的常用操作,封裝起來以便在外部調(diào)用!這樣我們就需要任務(wù)的執(zhí)行了:

/** * @Description: * * @Title: QuartzJob.java * @Package com.joyce.quartz * @Copyright: Copyright (c) 2014 * * @author Comsys-LZP * @date 2014-6-26 下午03:37:11 * @version V2.0 */ package com.joyce.quartz; import java.text.SimpleDateFormat; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; /** * @Description: 任務(wù)執(zhí)行類 * * @ClassName: QuartzJob * @Copyright: Copyright (c) 2014 * * @version V2.0 */ public class QuartzJob implements Job { @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+ "........."); } }

Ok,我們來測試一下:

/** * @Description: * * @Title: QuartzTest.java * @Package com.joyce.quartz.main * @Copyright: Copyright (c) 2014 * * @author Comsys-LZP * @date 2014-6-26 下午03:35:05 * @version V2.0 */ package com.joyce.quartz.main; import com.joyce.quartz.QuartzJob; import com.joyce.quartz.QuartzManager; /** * @Description: 測試類 * * @ClassName: QuartzTest * @Copyright: Copyright (c) 2014 * * @version V2.0 */ public class QuartzTest { public static void main(String[] args) { try { String job_name = "動態(tài)任務(wù)調(diào)度"; System.out.println("【系統(tǒng)啟動】開始(每1秒輸出一次)..."); QuartzManager.addJob(job_name, QuartzJob.class, "0/1 * * * * ?"); Thread.sleep(5000); System.out.println("【修改時間】開始(每2秒輸出一次)..."); QuartzManager.modifyJobTime(job_name, "10/2 * * * * ?"); Thread.sleep(6000); System.out.println("【移除定時】開始..."); QuartzManager.removeJob(job_name); System.out.println("【移除定時】成功"); System.out.println("【再次添加定時任務(wù)】開始(每10秒輸出一次)..."); QuartzManager.addJob(job_name, QuartzJob.class, "*/10 * * * * ?"); Thread.sleep(60000); System.out.println("【移除定時】開始..."); QuartzManager.removeJob(job_name); System.out.println("【移除定時】成功"); } catch (Exception e) { e.printStackTrace(); } } }

運行一下,看看效果

總結(jié)

以上是生活随笔為你收集整理的任务调度开源框架Quartz动态添加、修改和删除定时任务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。