好用的Quartz管理器类
转发的代码,原理就不提了
下面直接上代码:
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);
- }
- }
- }
好用的Quartz管理器类的更多相关文章
- DriverManager 驱动管理器类简介 JDBC简介(三)
驱动程序管理器是负责管理驱动程序的,驱动注册以后,会保存在DriverManager中的已注册列表中 后续的处理就可以对这个列表进行操作 简言之,驱动管理器,就是字面含义,主要负责就是管理 驱动 概述 ...
- X509证书信任管理器类的详解
在JSSE中,证书信任管理器类就是实现了接口X509TrustManager的类.我们可以自己实现该接口,让它信任我们指定的证书. 接口X509TrustManager有下述三个公有的方法需要我们实现 ...
- Django 自定义模型管理器类2个应用场景
class BookManager(models.Manager): # 改变查询集的结果集 def all(self): books = super().all() # QuerySet books ...
- django的模型类管理器-----------数据库操作的封装
模型实例方法 str():在将对象转换成字符串时会被调用. save():将模型对象保存到数据表中,ORM框架会转换成对应的insert或update语句. delete():将模型对象从数据表中删除 ...
- Django(十)模型:django模型类对数据库的:增/删/改/查、自关联、管理器、元选项(指定表名)
一.插入.更新和删除 调用一个模型类对象的save方法的时候就可以实现对模型类对应数据表的插入和更新. 调用一个模型类对象的delete方法的时候就可以实现对模型类对应数据表数据的删除. 二.自关联 ...
- Duilib源码分析(四)绘制管理器—CPaintManagerUI
接下来,分析uilib.h中的UIManager.h,在正式分析CPaintManagerUI前先了解前面的一些宏.结构: 枚举类型EVENTTYPE_UI:定义了UIManager.h中事件通告类型 ...
- 从零开始山寨Caffe·叁:全局线程管理器
你需要一个管家,随手召唤的那种,想吃啥就吃啥. ——设计一个全局线程管理器 一个机器学习系统,需要管理一些公共的配置信息,如何存储这些配置信息,是一个难题. 设计模式 MVC框架 在传统的MVC编程框 ...
- 设计模式之美:Manager(管理器)
索引 意图 结构 参与者 适用性 效果 实现 实现方式(一):Manager 模式的示例实现. 意图 将对一个类的所有对象的管理封装到一个单独的管理器类中. 这使得管理职责的变化独立于类本身,并且管理 ...
- Manager(管理器)
Manager(管理器) 索引 意图 结构 参与者 适用性 效果 实现 实现方式(一):Manager 模式的示例实现. 意图 将对一个类的所有对象的管理封装到一个单独的管理器类中. 这使得管理职责的 ...
随机推荐
- 微信公众号申请+新浪SAE申请
一. 新浪SAE服务申请 1. 注冊地址:http://t.cn/RqMHPto 2. 选择控制台>>云应用SAE 3. 创建新应用 4. 填写域名 5. 代码管理选择SVN 6. 创建版 ...
- golang 特殊知识点
golang 代码不需要分号; 但是又会自己在底层增加;号 ,所以 golang的{左花括号必须在代码的最后一行,而不能在新的一行; golang 代码组织里需要注意 vendor 和 interna ...
- 【JavaScript 插件】图片展示插件 PhotoSwipe 初识
前言: 考虑自己网站的图片展示,而且要支持移动端和PC端.自己写的代码也不尽如意,要写好的话也需要时间,于是就想到了使用相关插件. 准备: PhotoSwipe 官网地址:http://photosw ...
- zigw 和 nanoWatch, libudev.so 和 XMR 挖矿程序查杀记录
最近这两天以来,服务器一致声音很响.本来以为有同事在运行大的程序,结果后来发现持续很长时间都是这样,并没有停的样子.后来查了一下,发现有几个可疑进程导致,干掉之后,果然服务器静悄悄了. 但是,问题并没 ...
- Keras/Tensorflow选择GPU/CPU运行
首先,导入os,再按照PCI_BUS_ID顺序,从0开始排列GPU, import os os.environ["CUDA_DEVICE_ORDER"] = "PCI_B ...
- 每天一个linux命令:vmstat
1.命令简介 vmstat(Virtual Memory Statistics 虚拟内存统计) 命令用来显示Linux系统虚拟内存状态,也可以报告关于进程.内存.I/O等系统整体运行状态. 2.用法 ...
- notepad++ 复制代码--高亮 - 带颜色
思路来源:http://blog.csdn.net/super828/article/details/72826024 选择代码,然后右键选择菜单命令
- SNF软件开发机器人-子系统-功能-功能类型(普通表改为树型表)
功能类型(普通表改为树型表) 功能类型分为普通功能和树形功能.因为资源表中不存在ParentId字段,故只能将多表的主表改为树型表. 1.效果展示: 2.使用说明: (1)当需要用一张普通的资源表显示 ...
- Spark 精品文章转载(目录)
学习 Spark 中,别人整理不错的文章,转载至本博客,方便自己学习,并按照不同的模块归档整理.每个文章作者能力不同,写文章所处的时间点不同,可能会略有差异,在阅读的同时,注意当时的文章的内容是否已经 ...
- 如何将自己写的verilog模块封装成IP核
如何将自己写的verilog模块封装成IP核 (2014-11-21 14:53:29) 转载▼ 标签: 财经 分类: 我的东东 =======================第一篇========= ...