QuartzManager 定时器管理
来源:互联网 发布:jsmd5解密算法 编辑:程序博客网 时间:2024/06/10 01:19
主要来源:http://blog.csdn.net/xlxxcc/article/details/52115995
import org.quartz.*;import org.quartz.impl.StdSchedulerFactory;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * 定时器管理 * 来源:http://blog.csdn.net/xlxxcc/article/details/52115995 */public class QuartzManager { private static Logger logger = LoggerFactory.getLogger(QuartzManager.class); private static SchedulerFactory schedulerFactory = new StdSchedulerFactory(); /** * @Description: 添加一个定时任务 * * @param jobName 任务名 * @param jobGroupName 任务组名 * @param triggerName 触发器名 * @param triggerGroupName 触发器组名 * @param jobClass 任务 * @param cron 时间设置,参考quartz说明文档 */ 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) { e.printStackTrace(); throw new RuntimeException(e); } } /** * @Description: 修改一个任务的触发时间 * * @param triggerName 触发器名 * @param triggerGroupName 触发器组名 * @param cron 时间设置,参考quartz说明文档 */ public static void modifyJobTime(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); } } /** * 安全关闭 * @throws SchedulerException */ public static void safeShutdown() throws SchedulerException { Scheduler scheduler = schedulerFactory.getScheduler(); int executingJobSize = scheduler.getCurrentlyExecutingJobs().size(); logger.info("安全关闭 当前还有" + executingJobSize + "个任务正在执行,等待完成后关闭"); //等待任务执行完后安全关闭 scheduler.shutdown(true); logger.info("安全关闭 成功"); }
阅读全文
0 0
- QuartzManager 定时器管理
- 定时器管理
- 4.时间管理、定时器管理
- 实现定时器管理类
- Windows定时器管理
- 定时器和时间管理
- 软件定时器管理浅见
- spring的定时器管理
- Doubango 定时器管理用法
- AMPS:定时器管理
- spring定时器管理
- oracle 定时器动态管理
- ngx_timeofday,定时器管理
- 多线程的自动管理(定时器)
- 通过spring管理java定时器
- LINUX定时器和时间管理
- C#列表 定时器的管理
- 服务器定时器的管理优化
- (13)2017.8.14-集合框架(泛型)
- Sort List问题及解法
- Javascript如何改变对象的原型
- 建立bond的几种参数
- tableView 的常规效果:传统和内边距的设定
- QuartzManager 定时器管理
- 433和2.4G无线通信比较
- 算法复杂度计算O(N)
- 使用scrapy 抓取顶点小说
- 18. 4Sum
- Java集合-04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)
- 新型的大型bbs架构(squid+nginx)
- CSS布局方式
- 了解到的一些泛型知识,以及在此过程中遇到的问题