本文共 5419 字,大约阅读时间需要 18 分钟。
主方法:
package com.dinfo.xyk.utils;
import java.text.ParseException; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.impl.StdSchedulerFactory; 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";/*** 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名** @param jobName* 任务名* @param jobClass* 任务* @param time* 时间设置,参考quartz说明文档* @throws SchedulerException* @throws ParseException*/public static void addJob(String jobName, Class jobClass, String time) { try { Scheduler sched = gSchedulerFactory.getScheduler();JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, jobClass);// 任务名,任务组,任务执行类// 触发器CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);// 触发器名,触发器组trigger.setCronExpression(time);// 触发器时间设定sched.scheduleJob(jobDetail, trigger);// 启动if (!sched.isShutdown()) { sched.start();}} catch (Exception e) { e.printStackTrace();throw new RuntimeException(e);}}/*** 添加一个定时任务** @param jobName* 任务名* @param jobGroupName* 任务组名* @param triggerName* 触发器名* @param triggerGroupName* 触发器组名* @param jobClass* 任务* @param time* 时间设置,参考quartz说明文档* @throws SchedulerException* @throws ParseException*/public static void addJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName,String jobClass, String time) { try { Scheduler sched = gSchedulerFactory.getScheduler();JobDetail jobDetail = new JobDetail(jobName, jobGroupName, Class.forName(jobClass));// 任务名,任务组,任务执行类// 触发器CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);// 触发器名,触发器组trigger.setCronExpression(time);// 触发器时间设定sched.scheduleJob(jobDetail, trigger);} catch (Exception e) { e.printStackTrace();throw new RuntimeException(e);}}//// /**// * 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)// *// * @param jobName// * @param time// */// @SuppressWarnings("rawtypes")// 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();// String jobClass = objJobClass.getName();// removeJob(jobName);// addJob(jobName, jobClass, time);// }// } catch (Exception e) { // e.printStackTrace();// throw new RuntimeException(e);// }// }/*** 修改一个任务的触发时间** @param triggerName* @param triggerGroupName* @param time*/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);// 重启触发器sched.resumeTrigger(triggerName, triggerGroupName);}} catch (Exception e) { e.printStackTrace();throw new RuntimeException(e);}}/*** 移除一个任务(使用默认的任务组名,触发器名,触发器组名)** @param jobName*/public static void removeJob(String jobName) { try { Scheduler sched = gSchedulerFactory.getScheduler();sched.pauseTrigger(jobName, TRIGGER_GROUP_NAME);// 停止触发器sched.unscheduleJob(jobName, TRIGGER_GROUP_NAME);// 移除触发器sched.deleteJob(jobName, JOB_GROUP_NAME);// 删除任务} catch (Exception e) { e.printStackTrace();throw new RuntimeException(e);}}/*** 移除一个任务** @param jobName* @param jobGroupName* @param triggerName* @param triggerGroupName*/public static void removeJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName) { try { Scheduler sched = gSchedulerFactory.getScheduler();sched.pauseTrigger(triggerName, triggerGroupName);// 停止触发器sched.unscheduleJob(triggerName, triggerGroupName);// 移除触发器sched.deleteJob(jobName, jobGroupName);// 删除任务} catch (Exception e) { e.printStackTrace();throw new RuntimeException(e);}}/*** 启动所有定时任务*/public static void startJobs() { try { Scheduler sched = gSchedulerFactory.getScheduler();sched.start();} catch (Exception e) { e.printStackTrace();throw new RuntimeException(e);}}/*** 关闭所有定时任务*/public static void shutdownJobs() { try { Scheduler sched = gSchedulerFactory.getScheduler();if (!sched.isShutdown()) { sched.shutdown();}} catch (Exception e) { e.printStackTrace();throw new RuntimeException(e);}}public static void main(String[] args) throws InterruptedException { QuartzManager manager = new QuartzManager();manager.addJob("work1", Test.class, "*/3 * * * * ?");} }执行的动作:实现job
package com.dinfo.xyk.utils;
import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Test implements Job { public void execute(JobExecutionContext arg0) throws JobExecutionException { System.out.println("dasafda");try { Thread.sleep(10000);} catch (InterruptedException e) { // TODO Auto-generated catch blocke.printStackTrace();}} }转载地址:http://yifnn.baihongyu.com/