Quartz封装
来源:互联网 发布:牛牛开挂软件 编辑:程序博客网 时间:2024/06/03 11:13
Quartz封装
Quartz是个开源的定时任务组件,我的目标是,封装一个类,然后用户只需要实现Job接口,就可以使用Quartz调度定时任务。突发其想想记录下来,其实网上也有很多类似的文章了,大家见怪不怪吧!
Maven依赖
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.2.1</version> </dependency> </dependencies>
Java代码
大家只要知道需要实现Job接口,了解Cron表达式,即可使用Quartz调度定时任务啦。
package org.lin.quartz;import java.util.Date;import java.util.Map;import org.quartz.CronScheduleBuilder;import org.quartz.Job;import org.quartz.JobBuilder;import org.quartz.JobDataMap;import org.quartz.JobDetail;import org.quartz.JobKey;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.Trigger;import org.quartz.TriggerBuilder;import org.quartz.TriggerKey;import org.quartz.impl.StdSchedulerFactory;/** * 为方便使用Quartz进行的封装 * @author linjingfu * */public class QuartzMgr { public static QuartzMgr instance = new QuartzMgr(); //通过一个Scheduler实例,方便管理正在执行的Job private Scheduler scheduler; //Quartz有group的概念,一般通过jobName区分即可 private static final String DEFAULT_GROUP_NAME = "defaultGroupName"; private QuartzMgr() { try { scheduler = StdSchedulerFactory.getDefaultScheduler(); scheduler.start(); } catch (SchedulerException e) { e.printStackTrace(); } } public static QuartzMgr getInstance() { return instance; } /** * 添加定时任务 * @param jobName 不重复的任务名称 * @param jobClazz Job接口的实现类 * @param cron cron表达式 * @param params 携带的参数,可在Job内部获取该参数 */ public void addJob(String jobName, Class<? extends Job> jobClazz, String cron, Map<String, Object> params) { try { JobDataMap map = new JobDataMap(); if (params != null && !params.isEmpty()) { map.putAll(params); } Trigger trigger = TriggerBuilder .newTrigger() .withIdentity(jobName, DEFAULT_GROUP_NAME) .withSchedule(CronScheduleBuilder.cronSchedule(cron)) .build(); JobDetail jobDetail = JobBuilder.newJob(jobClazz) .usingJobData(map) .withIdentity(jobName, DEFAULT_GROUP_NAME) .build(); scheduler.scheduleJob(jobDetail, trigger); } catch (SchedulerException e) { e.printStackTrace(); throw new RuntimeException(e); } } /** * 在预定的时间执行一次任务 * @param jobName * @param jobClazz * @param executeTime 执行任务的时间 * @param params */ public void addOneTimeJob(String jobName, Class<? extends Job> jobClazz, long executeTime, Map<String, Object> params) { try { JobDataMap map = new JobDataMap(); if (params != null && !params.isEmpty()) { map.putAll(params); } Trigger trigger = TriggerBuilder .newTrigger() .withIdentity(jobName, DEFAULT_GROUP_NAME) .startAt(new Date(executeTime)) .build(); JobDetail jobDetail = JobBuilder.newJob(jobClazz) .usingJobData(map) .withIdentity(jobName, DEFAULT_GROUP_NAME) .build(); scheduler.scheduleJob(jobDetail, trigger); } catch (SchedulerException e) { e.printStackTrace(); throw new RuntimeException(e); } } /** * 删除任务 * @param jobName */ public void removeJob(String jobName) { try { JobKey jkey = new JobKey(jobName, DEFAULT_GROUP_NAME); if(!scheduler.checkExists(jkey)){ return; } TriggerKey key = new TriggerKey(jobName, DEFAULT_GROUP_NAME); scheduler.pauseTrigger(key); scheduler.unscheduleJob(key); scheduler.deleteJob(new JobKey(jobName, DEFAULT_GROUP_NAME)); } catch (Exception e) { throw new RuntimeException(e); } } public void shutDown() { try { scheduler.shutdown(); } catch (SchedulerException e) { e.printStackTrace(); throw new RuntimeException(e); } }}
package org.lin.quartz;import org.quartz.Job;import org.quartz.JobDataMap;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;/** * 实现Job接口,供Quartz调度 * @author linjingfu * */public class HelloJob implements Job{ @Override public void execute(JobExecutionContext context) throws JobExecutionException { //获取外部数据的方式 JobDataMap params = context.getJobDetail().getJobDataMap(); System.out.println("hello," + params.getString("name")); }}
package org.lin.quartz;import java.util.HashMap;import java.util.Map;public class Main { public static void main(String[] args) { Map<String, Object> map = new HashMap<>(); map.put("name", "Jack"); QuartzMgr.getInstance().addJob("hello", HelloJob.class, "*/2 * * * * ? *", map); try { Thread.sleep(4000); } catch (InterruptedException e) { e.printStackTrace(); } QuartzMgr.getInstance().removeJob("hello"); QuartzMgr.getInstance().addOneTimeJob("hello", HelloJob.class, System.currentTimeMillis() + 3000, map); }}
阅读全文
0 0
- Quartz封装
- 玩转 quartz quartz 教程 quartz 实现 quartz 封装
- 基于Quartz.Net框架封装任务调度类
- 基于Quartz.Net框架封装任务调度类2
- Quartz
- quartz
- Quartz
- Quartz
- quartz
- quartz
- quartz
- Quartz
- Quartz
- Quartz
- Quartz
- Quartz
- Quartz
- Quartz
- tomcat服务HTTPS双向认证
- iPhont X适配
- Spark集群搭建
- C++自动类型转换
- 指针数组
- Quartz封装
- 是什么让程序员成了一份苦逼的工作?
- 覆盖默认样式(React组件)
- [jzoj]3172. 【GDOI2013模拟4】贴瓷砖(AC自动机+卡时卡空)
- JAVA的 循环 随机数 函数
- Qt中的字符串类QString
- 分分钟上手C#的委托和事件
- 通过 JavaMail 实现QQ邮件发送
- pk10/888赛车精准追龙计划分配攻略百科