Quartz 2.2 动态添加、修改和删除定时任务

Quartz 2.2 动态添加、修改和删除定时任务Quartz 2.2 的实现原理和运行过程,若不懂, 请阅读我的上一篇文章下面直接上代码: QuartzManager.java 动态添加、修改

欢迎大家来到IT世界,在知识的湖畔探索吧!

Quartz 2.2 动态添加、修改和删除定时任务

Quartz 2.2 的实现原理和运行过程,若不懂, 请阅读我的上一篇文章

下面直接上代码:

QuartzManager.java 动态添加、修改和删除定时任务管理类

import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzManager {
 private static SchedulerFactory schedulerFactory = new StdSchedulerFactory(); 
 /** 
 * @Description: 添加一个定时任务 
 * 
 * @param jobName 任务名 
 * @param jobGroupName 任务组名 
 * @param triggerName 触发器名 
 * @param triggerGroupName 触发器组名 
 * @param jobClass 任务 
 * @param cron 时间设置,参考quartz说明文档 
 */ 
 @SuppressWarnings({ "unchecked", "rawtypes" }) 
 public static void addJob(String jobName, String jobGroupName, 
 String triggerName, String triggerGroupName, Class jobClass, String cron) { 
 try { 
 Scheduler sched = schedulerFactory.getScheduler(); 
 // 任务名,任务组,任务执行类
 JobDetail jobDetail= JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroupName).build();
 // 触发器 
 TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
 // 触发器名,触发器组 
 triggerBuilder.withIdentity(triggerName, triggerGroupName);
 triggerBuilder.startNow();
 // 触发器时间设定 
 triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));
 // 创建Trigger对象
 CronTrigger trigger = (CronTrigger) triggerBuilder.build();
 // 调度容器设置JobDetail和Trigger
 sched.scheduleJob(jobDetail, trigger); 
 // 启动 
 if (!sched.isShutdown()) { 
 sched.start(); 
 } 
 } catch (Exception e) { 
 throw new RuntimeException(e); 
 } 
 } 
 /** 
 * @Description: 修改一个任务的触发时间
 * 
 * @param jobName 
 * @param jobGroupName
 * @param triggerName 触发器名
 * @param triggerGroupName 触发器组名 
 * @param cron 时间设置,参考quartz说明文档 
 */ 
 public static void modifyJobTime(String jobName, 
 String jobGroupName, String triggerName, String triggerGroupName, String cron) { 
 try { 
 Scheduler sched = schedulerFactory.getScheduler(); 
 TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
 CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey); 
 if (trigger == null) { 
 return; 
 } 
 String oldTime = trigger.getCronExpression(); 
 if (!oldTime.equalsIgnoreCase(cron)) { 
 /** 方式一 :调用 rescheduleJob 开始 */
 // 触发器 
 TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
 // 触发器名,触发器组 
 triggerBuilder.withIdentity(triggerName, triggerGroupName);
 triggerBuilder.startNow();
 // 触发器时间设定 
 triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));
 // 创建Trigger对象
 trigger = (CronTrigger) triggerBuilder.build();
 // 方式一 :修改一个任务的触发时间
 sched.rescheduleJob(triggerKey, trigger);
 /** 方式一 :调用 rescheduleJob 结束 */
 /** 方式二:先删除,然后在创建一个新的Job */
 //JobDetail jobDetail = sched.getJobDetail(JobKey.jobKey(jobName, jobGroupName)); 
 //Class<? extends Job> jobClass = jobDetail.getJobClass(); 
 //removeJob(jobName, jobGroupName, triggerName, triggerGroupName); 
 //addJob(jobName, jobGroupName, triggerName, triggerGroupName, jobClass, cron); 
 /** 方式二 :先删除,然后在创建一个新的Job */
 } 
 } catch (Exception e) { 
 throw new RuntimeException(e); 
 } 
 } 
 /** 
 * @Description: 移除一个任务 
 * 
 * @param jobName 
 * @param jobGroupName 
 * @param triggerName 
 * @param triggerGroupName 
 */ 
 public static void removeJob(String jobName, String jobGroupName, 
 String triggerName, String triggerGroupName) { 
 try { 
 Scheduler sched = schedulerFactory.getScheduler(); 
 TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
 sched.pauseTrigger(triggerKey);// 停止触发器 
 sched.unscheduleJob(triggerKey);// 移除触发器 
 sched.deleteJob(JobKey.jobKey(jobName, jobGroupName));// 删除任务 
 } catch (Exception e) { 
 throw new RuntimeException(e); 
 } 
 } 
 /** 
 * @Description:启动所有定时任务 
 */ 
 public static void startJobs() { 
 try { 
 Scheduler sched = schedulerFactory.getScheduler(); 
 sched.start(); 
 } catch (Exception e) { 
 throw new RuntimeException(e); 
 } 
 } 
 /** 
 * @Description:关闭所有定时任务 
 */ 
 public static void shutdownJobs() { 
 try { 
 Scheduler sched = schedulerFactory.getScheduler(); 
 if (!sched.isShutdown()) { 
 sched.shutdown(); 
 } 
 } catch (Exception e) { 
 throw new RuntimeException(e); 
 } 
 } 
}

欢迎大家来到IT世界,在知识的湖畔探索吧!

Quartz 2.2 动态添加、修改和删除定时任务

MyJob.java 任务类

欢迎大家来到IT世界,在知识的湖畔探索吧!import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class MyJob implements Job{
 public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
 System.out.println(new Date() + ": doing something...");
 }
}
Quartz 2.2 动态添加、修改和删除定时任务

Test.Java 测试类

public class Test {
 public static String JOB_NAME = "动态任务调度"; 
 public static String TRIGGER_NAME = "动态任务触发器"; 
 public static String JOB_GROUP_NAME = "XLXXCC_JOB_GROUP"; 
 public static String TRIGGER_GROUP_NAME = "XLXXCC_JOB_GROUP"; 
 public static void main(String[] args) {
 try { 
 System.out.println("【系统启动】开始(每1秒输出一次)..."); 
 QuartzManager.addJob(JOB_NAME, JOB_GROUP_NAME, TRIGGER_NAME, TRIGGER_GROUP_NAME, MyJob.class, "0/1 * * * * ?"); 
 Thread.sleep(5000); 
 System.out.println("【修改时间】开始(每5秒输出一次)..."); 
 QuartzManager.modifyJobTime(JOB_NAME, JOB_GROUP_NAME, TRIGGER_NAME, TRIGGER_GROUP_NAME, "0/5 * * * * ?"); 
 Thread.sleep(6000); 
 System.out.println("【移除定时】开始..."); 
 QuartzManager.removeJob(JOB_NAME, JOB_GROUP_NAME, TRIGGER_NAME, TRIGGER_GROUP_NAME); 
 System.out.println("【移除定时】成功"); 
 } catch (Exception e) { 
 e.printStackTrace(); 
 } 
 }
}

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/22503.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信