任务调度开源框架Quartz动态添加、修改和删除定时任务
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz框架包含了调度器监听、作业和触发器监听。你可以配置作业和触发器监听为全局监听或者是特定于作业和触发器的监听。Quartz 允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz 的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。并且还能和spring配置整合使用。Quartz在功能上远远超越了JDK自带的Timer,很好很强大!好啦,直接上代码:
- /**
- * @Description:
- *
- * @Title: QuartzManager.java
- * @Package com.joyce.quartz
- * @Copyright: Copyright (c) 2014
- *
- * @author Comsys-LZP
- * @date 2014-6-26 下午03:15:52
- * @version V2.0
- */
- package com.joyce.quartz;
- 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
- *
- * @author Comsys-LZP
- * @date 2014-6-26 下午03:37:11
- * @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,我们来测试一下:
- package com.joyce.quartz.main;
- import com.joyce.quartz.QuartzJob;
- import com.joyce.quartz.QuartzManager;
- /**
- * @Description: 测试类
- *
- * @ClassName: QuartzTest
- * @Copyright: Copyright (c) 2014
- *
- * @author Comsys-LZP
- * @date 2014-6-26 下午03:35:05
- * @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();
- }
- }
- }
任务调度开源框架Quartz动态添加、修改和删除定时任务的更多相关文章
- 任务调度开源框架Quartz动态加入、改动和删除定时任务
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz框架包括了调度器监听.作业和触发器监听.你能够配置作业和触发器监听为全局监听或者是特定于 ...
- 任务调度开源框架Quartz概述
任务调度开源框架Quartz 几乎每个项目中都用到了自动任务处理功能.所以在任务调度的功能很常用,但是一个好的任务调度程序是一个颇具挑战性的工作.最近用到Quartz这个框架,感觉很好,所以进行学习. ...
- 开源框架Quartz动态加入、改动和删除定时任务 (二)
貌似每次回过头去看之前写的一些东西,总感觉不是非常完美~~虽说不做完美人.但也要做完美事!这次主要是针对Quartz的动态维护和Spring集成.简单粗暴一点,直接上代码,有什么不了解留言交流 先来一 ...
- Java任务调度开源框架quartz学习
一.quartz学习 Java框架介绍:Quartz从入门到进阶 http://edu.yesky.com/edupxpt/233/2209233.shtml 1.例子:http://javacraz ...
- Quartz动态添加、修改和删除定时任务
任务调度开源框架Quartz动态添加.修改和删除定时任务 Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz框架包含了调度器监听.作业和触 ...
- Quartz动态添加,修改,删除任务(暂停,任务状态,恢复,最近触发时间)
首页 博客 学院 下载 图文课 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye GitChat 写博客 小程序 消息 登录注册 关闭 quartz_Cron表达式一分钟教程 09-05 ...
- SpringBoot定时任务升级篇(动态添加修改删除定时任务)
需求缘起:在发布了<Spring Boot定时任务升级篇>之后得到不少反馈,其中有一个反馈就是如何动态添加修改删除定时任务?那么我们一起看看具体怎么实现,先看下本节大纲: (1)思路说明: ...
- Quartz 2.2 动态添加、修改和删除定时任务
QuartzManager.Java 动态添加.修改和删除定时任务管理类 import org.quartz.CronScheduleBuilder; import org.quartz.CronTr ...
- Quartz 2.3 动态添加、修改和删除定时任务
下面直接上代码: <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>qu ...
随机推荐
- SQL SERVER代码生成器必备
写代码生成器的时候经常用到的SQL 1.表添加注释 EXECUTE sp_addextendedproperty N'MS_Description', N'表注释', N'user', N'dbo', ...
- Snort - 配置文件
Snort.conf 版本 2.9.8.3 编译可用选项: --enable-gre --enable-mpls --enable-targetbased --enable-ppm --enable- ...
- ArcGisServer根据最大最小坐标换算瓦片行列号
1.前言 在上一节中我们知道了屏幕上一像素等于实际中多少单位长度(米或经纬度)的换算方法,而知道这个原理后,接下来我们要怎么用它呢?它和我们前端显示地图有什么关联呢?这一节,我会尽量详细的将这两个问题 ...
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q1-Q3)
这里我把从网上搜集到的针对Sharepoint 70-576的有关练习进行系统的解析,整理成一个系列, 分期.分批次共享出来,供大家研究. 70-573考试注重的是"知道"相关知识 ...
- Android 网络HTML查看器
本文实现一个基于Android的网络HTML查看器 新建项目,项目布局文件如下: <LinearLayout xmlns:android="http://schemas.android ...
- Android项目开发实战-2048游戏
<2048>是一款比较流行的数字游戏,最早于2014年3月20日发行.原版2048首先在GitHub上发布,原作者是Gabriele Cirulli,后被移植到各个平台.这款游戏是基于&l ...
- 你真的了解UITextField吗?
一:首先查看一下关于UITextField的定义 NS_CLASS_AVAILABLE_IOS(2_0) @interface UITextField : UIControl <UITextIn ...
- msbuild ConfuserEx.Build 加密
https://www.nuget.org/packages/ConfuserEx.Build/ <?xml version="1.0" encoding="utf ...
- 定义返回Block的函数
鉴于Block与函数的相似性,先从返回函数指针的函数入手 返回函数指针的函数 int fun1(int arg){ return arg + 1;}int fun2(int arg){ return ...
- 腾讯Tinker初入门总结