自定义Quartz超实用工具类
来源:互联网 发布:chm2doc软件下载 编辑:程序博客网 时间:2024/06/15 13:17
自定义Quartz超实用工具类
1.添加maven依赖
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz --><dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>${quartz.version}</version></dependency>
2.实现Quartz实用工具类
/** * Quartz任务调度器工具类 * * @author CatalpaFlat * @date Create in 10:25 2017/11/16 */public class QuartzUtil { /** * 调度器工厂 */ private static SchedulerFactory schedulerFactory = new StdSchedulerFactory(); /** * 默认Job组名 */ private static String JOB_GROUP_NAME = "DEFAULT_JOB_GROUP_NAME"; /** * 默认触发器组名 */ private static String TRIGGER_GROUP_NAME = "DEFAULT_TRIGGER_GROUP_NAME"; /** * 获取调度器 * * @return Scheduler * @throws SchedulerException Scheduler获取异常 */ private static Scheduler getScheduler() throws SchedulerException { return schedulerFactory.getScheduler(); } /** * 获取CronTrigger * * @param jobName 任务名 * @param triggerGroupName 触发器组名(为空使用默认) * @param time crond格式时间 * @return CronTrigger */ private static CronTrigger getCronTrigger(String jobName, String triggerGroupName, String time) { if (StringUtils.isBlank(triggerGroupName)) { triggerGroupName = TRIGGER_GROUP_NAME; } return TriggerBuilder.newTrigger().withIdentity(jobName, triggerGroupName) .withSchedule(CronScheduleBuilder.cronSchedule(time)).build(); } /** * 获取JobDetail * * @param jobName 任务名 * @param jobGroupName 任务组名(为空使用默认) * @param cls 任务类 * @param jobDataMap 附带参数 * @return JobDetail */ private static JobDetail getJobDetail(String jobName, String jobGroupName, Class<? extends Job> cls, JobDataMap jobDataMap) { if (StringUtils.isBlank(jobGroupName)) { jobGroupName = JOB_GROUP_NAME; } if (jobDataMap != null) { return JobBuilder.newJob(cls).withIdentity(jobName, jobGroupName).usingJobData(jobDataMap).build(); } else { return JobBuilder.newJob(cls).withIdentity(jobName, jobGroupName).build(); } } /** * 设置JobDetail 和 CronTrigger 到 scheduler(已获取的调度器中,无需重复调用) * * @param cls 任务嘞 * @param jobName 任务名 * @param jobGroupName 任务组名(为空使用默认) * @param triggerGroupName 触发器组名(为空使用默认) * @param time crond格式时间 * @param jobDataMap 附带参数 * @param scheduler 调度器 * @return 设置成功与否 * @throws SchedulerException 调度器异常 */ private static boolean setJobDetailAndCronTriggerInScheduler(Class<? extends Job> cls, String jobName, String jobGroupName, String triggerGroupName, String time, JobDataMap jobDataMap, Scheduler scheduler) throws SchedulerException { if (!isJobKey(scheduler, jobName, jobGroupName)) { return false; } JobDetail jobDetail = getJobDetail(jobName, jobGroupName, cls, jobDataMap); CronTrigger trigger = getCronTrigger(jobName, triggerGroupName, time); scheduler.scheduleJob(jobDetail, trigger); if (!scheduler.isShutdown()) { scheduler.start(); } return true; } /** * 从调度器中移除Job * * @param scheduler 调度器 * @param triggerKey 触发器key(名,组) * @param jobKey 任务key(名,组) */ private static void removeJob(Scheduler scheduler, TriggerKey triggerKey, JobKey jobKey) { try { // 停止触发器 scheduler.pauseTrigger(triggerKey); //移除触发器 scheduler.unscheduleJob(triggerKey); // 删除任务 scheduler.deleteJob(jobKey); } catch (SchedulerException e) { e.printStackTrace(); } } /** * 使用CronTrigger类型添加任务 * * @param scheduler 调度器 * @param cls 任务嘞 * @param jobName 任务名 * @param jobGroupName 任务组名(为空使用默认) * @param triggerGroupName 触发器组名(为空使用默认) * @param time crond格式时间 * @param jobDataMap 附带参数 * @return 是否添加成功 */ private static boolean addJobByCronTrigger(Scheduler scheduler, Class<? extends Job> cls, String jobName, String jobGroupName, String triggerGroupName, String time, JobDataMap jobDataMap) { try { return setJobDetailAndCronTriggerInScheduler(cls, jobName, jobGroupName, triggerGroupName, time, jobDataMap, scheduler); } catch (SchedulerException e) { e.printStackTrace(); return false; } } /** * 判断是否存在JobKey * * @param scheduler 任务调度器 * @param jobName 任务名 * @param jobGroupName 任务组名 * @return 是否存在JobKey */ private static boolean isJobKey(Scheduler scheduler, String jobName, String jobGroupName) { JobKey jobKey = JobKey.jobKey(jobName, jobGroupName); try { JobDetail jobDetail = scheduler.getJobDetail(jobKey); return jobDetail == null; } catch (SchedulerException e) { e.printStackTrace(); return false; } } /** * 添加定时任务 * * @param cls 任务类 * @param jobName 任务名 * @param jobGroupName 任务组名(为空使用默认) * @param triggerGroupName 触发器组名(为空使用默认) * @param time crond格式时间 * @param jobDataMap 附带参数 * @return 是否正常添加任务 */ public static boolean addJobByCronTrigger(Class<? extends Job> cls, String jobName, String jobGroupName, String triggerGroupName, String time, JobDataMap jobDataMap) { try { if (StringUtils.isBlank(jobName)) { return false; } Scheduler scheduler = getScheduler(); return setJobDetailAndCronTriggerInScheduler(cls, jobName, jobGroupName, triggerGroupName, time, jobDataMap, scheduler); } catch (SchedulerException e) { e.printStackTrace(); return false; } } /** * 修改任务时间 * * @param jobName 任务名 * @param time crond格式时间 * @param jobGroupName 任务组名(为空使用默认) * @param triggerGroupName 触发器组名(为空使用默认) * @param jobDataMap 附带参数 * @return 是否修改成功 */ public static boolean modifyJobTime(String jobName, String time, String jobGroupName, String triggerGroupName, JobDataMap jobDataMap) { try { if (StringUtils.isBlank(jobName)) { return false; } Scheduler scheduler = getScheduler(); if (StringUtils.isBlank(triggerGroupName)) { triggerGroupName = TRIGGER_GROUP_NAME; } TriggerKey triggerKey = TriggerKey.triggerKey(jobName, triggerGroupName); CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); if (trigger == null) { return false; } String oldTime = trigger.getCronExpression(); if (!oldTime.equalsIgnoreCase(time)) { if (StringUtils.isBlank(jobGroupName)) { jobGroupName = JOB_GROUP_NAME; } JobKey jobKey = JobKey.jobKey(jobName, jobGroupName); JobDetail jobDetail = scheduler.getJobDetail(jobKey); Class<? extends Job> jobClass = jobDetail.getJobClass(); removeJob(scheduler, triggerKey, jobKey); return addJobByCronTrigger(scheduler, jobClass, jobName, jobGroupName, triggerGroupName, time, jobDataMap); } return true; } catch (SchedulerException e) { e.printStackTrace(); return false; } } /** * 启动所有定时任务 */ public static void startJobs() { try { Scheduler scheduler = getScheduler(); scheduler.start(); } catch (Exception e) { throw new RuntimeException(e); } } /** * 关闭所有定时任务 */ public static void shutdownJobs() { try { Scheduler scheduler = getScheduler(); if (!scheduler.isShutdown()) { scheduler.shutdown(); } } catch (Exception e) { throw new RuntimeException(e); } } /** * 停止一个job任务 * * @param jobName 任务名 * @param jobGroupName 任务组名(空位默认) * @return 是否停止 */ public static boolean pauseJob(String jobName, String jobGroupName) { try { Scheduler scheduler = getScheduler(); if (StringUtils.isBlank(jobGroupName)) { jobGroupName = JOB_GROUP_NAME; } scheduler.interrupt(JobKey.jobKey(jobName, jobGroupName)); return true; } catch (SchedulerException e) { e.printStackTrace(); return false; } } /** * 恢复一个job任务 * * @param jobName 任务名 * @param jobGroupName 任务组名(空位默认) * @return 是否恢复 */ public static boolean resumeJob(String jobName, String jobGroupName) { try { Scheduler scheduler = getScheduler(); scheduler.resumeJob(JobKey.jobKey(jobName, jobGroupName)); return true; } catch (SchedulerException e) { e.printStackTrace(); return false; } } /** * 添加定时任务 * * @param cls 任务类 * @param bJob 任务类属性 * @return 是否添加成功 */ public static boolean addJobByCronTrigger(Class<? extends Job> cls, BaseJob bJob) { if (bJob == null) { return false; } String jobName = bJob.getJobName(); if (StringUtils.isBlank(jobName)) { return false; } try { Scheduler scheduler = getScheduler(); return setJobDetailAndCronTriggerInScheduler(cls, jobName, bJob.getJobGroupName(), bJob.getTriggerGroupName(), bJob.getCronTime(), bJob.getJobDataMap(), scheduler); } catch (SchedulerException e) { e.printStackTrace(); return false; } } /** * 修改任务JobDateMap * * @param cls 任务类 * @param bJob 任务类属性 * @return 是否修改成功 */ public static boolean modifyJobDateMap(Class<? extends Job> cls, BaseJob bJob) { if (bJob == null) { return false; } String jobName = bJob.getJobName(); if (StringUtils.isBlank(jobName)) { return false; } String triggerGroupName = bJob.getTriggerGroupName(); if (StringUtils.isBlank(triggerGroupName)) { triggerGroupName = TRIGGER_GROUP_NAME; } TriggerKey triggerKey = TriggerKey.triggerKey(jobName, triggerGroupName); String jobGroupName = bJob.getJobGroupName(); if (StringUtils.isBlank(jobGroupName)) { jobGroupName = JOB_GROUP_NAME; } try { Scheduler scheduler = getScheduler(); JobKey jobKey = JobKey.jobKey(jobName, jobGroupName); JobDetail jobDetail1 = scheduler.getJobDetail(jobKey); if (jobDetail1 == null) { return false; } JobDataMap oldJobDataMap = jobDetail1.getJobDataMap(); JobDataMap jobDataMap = bJob.getJobDataMap(); if (!oldJobDataMap.equals(jobDataMap)) { Class<? extends Job> jobClass = jobDetail1.getJobClass(); removeJob(scheduler, triggerKey, jobKey); return addJobByCronTrigger(scheduler, jobClass, jobName, jobGroupName, triggerGroupName, bJob.getCronTime(), jobDataMap); } return true; } catch (SchedulerException e) { e.printStackTrace(); return false; } }}
阅读全文
0 0
- 自定义Quartz超实用工具类
- win7工具箱(超实用工具)
- 实用工具类
- 实用工具类
- 实用工具类
- 【原】分享超实用工具给大家
- 超实用工具:获取法定节假日、休息日、周末天数
- 日期实用工具类
- JAVA实用工具类
- Ultimate toolbox实用工具类
- C#:Excel实用工具类
- AS程序员实用工具类
- C# Excel实用工具类
- C#实用工具类
- C#:Excel实用工具类
- AS程序员实用工具类
- jQuery实用工具类代码
- commons collections 实用工具类
- Linux私房菜学习-第3章主机规划与磁盘分区
- 用CSS给图片设置大小
- MultiSelect使用!
- TCP的三次握手(建立连接)和四次挥手(关闭连接)
- 关于XE8开发安卓手机硬件
- 自定义Quartz超实用工具类
- c++之友元类
- 使用ajax后获取元素的方法以及事件委托的使用
- leetcode 154. Find Minimum in Rotated Sorted Array II(二分+递归)
- js 表格查询+升序降序+敏感词
- 在pcl用例中获取kinect深度图像数据,并用opencv显示出来
- LeetCode--Minimum Path Sum (最小路径和)Python
- C++ 递归实现简单语言解释器
- “懂你”才叫人工智能 根本不用担心AI抢你饭碗