如何推进网站建设,网站建设东莞老铁博客,随机网站生成器,天河网站建设专家Quartz 是个开源的作业调度框架#xff0c;为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz框架包含了调度器监听、作业和触发器监听。你可以配置作业和触发器监听为全局监听或者是特定于作业和触发器的监听。Quartz 允许开发人员根据时间间隔#xff08;或… Quartz 是个开源的作业调度框架为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz框架包含了调度器监听、作业和触发器监听。你可以配置作业和触发器监听为全局监听或者是特定于作业和触发器的监听。Quartz 允许开发人员根据时间间隔或天来调度作业。它实现了作业和触发器的多对多关系还能把多个作业与不同的触发器关联。整合了 Quartz 的应用程序可以重用来自不同事件的作业还可以为一个事件组合多个作业。并且还能和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: 定时任务管理类 * * 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: 添加一个定时任务使用默认的任务组名触发器名触发器组名 * * param jobName * 任务名 * param cls * 任务 * param time * 时间设置参考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);// 任务名任务组任务执行类 // 触发器 CronTrigger trigger new CronTrigger(jobName, TRIGGER_GROUP_NAME);// 触发器名,触发器组 trigger.setCronExpression(time);// 触发器时间设定 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 jobClass * 任务 * param time * 时间设置参考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);// 任务名任务组任务执行类 // 触发器 CronTrigger trigger new CronTrigger(triggerName, triggerGroupName);// 触发器名,触发器组 trigger.setCronExpression(time);// 触发器时间设定 sched.scheduleJob(jobDetail, trigger); } catch (Exception e) { throw new RuntimeException(e); } } /** * Description: 修改一个任务的触发时间(使用默认的任务组名触发器名触发器组名) * * 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: 修改一个任务的触发时间 * * 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); // 重启触发器 sched.resumeTrigger(triggerName, triggerGroupName); } } catch (Exception e) { throw new RuntimeException(e); } } /** * Description: 移除一个任务(使用默认的任务组名触发器名触发器组名) * * 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);// 停止触发器 sched.unscheduleJob(jobName, TRIGGER_GROUP_NAME);// 移除触发器 sched.deleteJob(jobName, JOB_GROUP_NAME);// 删除任务 } catch (Exception e) { throw new RuntimeException(e); } } /** * Description: 移除一个任务 * * 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);// 停止触发器 sched.unscheduleJob(triggerName, triggerGroupName);// 移除触发器 sched.deleteJob(jobName, jobGroupName);// 删除任务 } catch (Exception e) { throw new RuntimeException(e); } } /** * Description:启动所有定时任务 * * * 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:关闭所有定时任务 * * * 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任务调度对于任务的常用操作封装起来以便在外部调用这样我们就需要任务的执行了 /** * 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: 任务执行类 * * 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 动态任务调度; System.out.println(【系统启动】开始(每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(【再次添加定时任务】开始(每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(); } }
} 运行一下看看效果