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);    }}
原创粉丝点击