Quartz 工具类

来源:互联网 发布:软件技术有限公司 编辑:程序博客网 时间:2024/05/16 15:22
package test;import org.quartz.CronScheduleBuilder;import org.quartz.CronTrigger;import org.quartz.JobBuilder;import org.quartz.JobDetail;import org.quartz.JobKey;import org.quartz.Scheduler;import org.quartz.SchedulerFactory;import org.quartz.TriggerBuilder;import org.quartz.TriggerKey;import org.quartz.impl.StdSchedulerFactory;/** * Quartz 工具类 <br> * Date: 2016年6月22日 <br> * Copyright (c) 2016 xyw10000@163.com <br> *  * @author xuyw */public class QuartzUtil {    private static SchedulerFactory schedulerFactory;    private static Scheduler scheduler =null;    static {        try {            schedulerFactory = new StdSchedulerFactory();            scheduler = schedulerFactory.getScheduler();        } catch (Exception e) {            e.printStackTrace();        }    }    /**     * 添加job     */    public static void addJob(BaseJob job) {        try {            JobDetail jobDetail = JobBuilder.newJob(job.getClass())                    .withIdentity(job.getJobName(), job.getGroupName()).build();            CronTrigger trigger = TriggerBuilder                    .newTrigger()                    .withIdentity(job.getJobName(), job.getGroupName())                    .withSchedule(                            CronScheduleBuilder.cronSchedule(job.getCron()))                    .build();            scheduler.scheduleJob(jobDetail, trigger);            startJobs();        } catch (Exception e) {            e.printStackTrace();        }    }    /**     * 更新job执行时间     */    public static void modifyJobCron(BaseJob job) {        try {            String triggerName = job.getJobName();            String triggerGroupName = job.getGroupName();            TriggerKey triggerKey = new TriggerKey(triggerName,                    triggerGroupName);            CronTrigger trigger = (CronTrigger) scheduler                    .getTrigger(triggerKey);            if (trigger == null) {                return;            }            String oldCron = trigger.getCronExpression();            if (!oldCron.equalsIgnoreCase(job.getCron())) {                // 修改时间                trigger = trigger                        .getTriggerBuilder()                        .withIdentity(triggerKey)                        .withSchedule(                                CronScheduleBuilder.cronSchedule(job.getCron()))                        .build();                // 重启触发器                scheduler.rescheduleJob(triggerKey, trigger);            }        } catch (Exception e) {            e.printStackTrace();        }    }    /**     * 暂停任务     */    public static void pauseJob(BaseJob job) {        pauseJob(job.getJobName(), job.getGroupName());    }    /**     * 暂停任务     */    public static void pauseJob(String jobName, String jobGroup) {        handleJobStatus(1, jobName, jobGroup);    }    /**     * 移除job     */    public static void removeJob(BaseJob job) {        removeJob(job.getJobName(), job.getGroupName());    }    /**     * 移除job     */    public static void removeJob(String jobName, String groupName) {        handleJobStatus(3, jobName, groupName);    }    /**     * 恢复job     */    public static void recoverJob(BaseJob job) {        recoverJob(job.getJobName(), job.getGroupName());    }    /**     * 恢复job     */    public static void recoverJob(String jobName, String groupName) {        handleJobStatus(2, jobName, groupName);    }    /**     * 处理job状态     */    public static void handleJobStatus(int handleType, String jobName,            String groupName) {        JobKey jobKey = JobKey.jobKey(jobName, groupName);        try {            switch (handleType) {            case 1:// 暂停任务                scheduler.pauseJob(jobKey);                break;            case 2:// 恢复任务                scheduler.resumeJob(jobKey);                break;            case 3:// 删除任务                scheduler.deleteJob(jobKey);                break;            }        } catch (Exception e) {            e.printStackTrace();        }    }    public static void startJobs() {        try {            // 启动            if (!scheduler.isShutdown()) {                scheduler.start();            }        } catch (Exception e) {            e.printStackTrace();        }    }    public static void shutDownJobs() {        try {            if (!scheduler.isShutdown()) {                scheduler.shutdown();            }        } catch (Exception e) {            e.printStackTrace();        }    }    public static void main(String[] args) throws Exception {        //模拟读取        String [] clas ={"test.TestJob2","test.TestJob"};        String [] crons ={"0/5 * * * * ?","0/1 * * * * ?"};        for(int i=0;i<clas.length;i++){             Class<?> newClass = Class.forName(clas[i]);             BaseJob job = (BaseJob) newClass.newInstance();             job.setCron(crons[i]);             QuartzUtil.addJob(job);        }    }}
package test;import java.util.UUID;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;/** * BaseJob <br> * Date: 2016年6月22日 <br> * Copyright (c) 2016 xyw10000@163.com <br> *  * @author xuyw */public abstract class BaseJob implements Job {    private String jobName = UUID.randomUUID().toString().replaceAll("-", "");    private String groupName = UUID.randomUUID().toString().replaceAll("-", "");    private String cron = "0 30 10 ? * 6L 2015-2016";// 2015年至2016年的每月的最后一个星期五10:30触发一次事件    /** 任务状态 0停用 1启用 2删除 */    private String jobStatus;    /** 任务描述 */    private String desc;    abstract void doJob(JobExecutionContext context);    @Override    public void execute(JobExecutionContext context)            throws JobExecutionException {        doJob(context);    }    public String getJobName() {        return jobName;    }    public void setJobName(String jobName) {        this.jobName = jobName;    }    public String getGroupName() {        return groupName;    }    public void setGroupName(String groupName) {        this.groupName = groupName;    }    public String getCron() {        return cron;    }    public void setCron(String cron) {        this.cron = cron;    }    public String getJobStatus() {        return jobStatus;    }    public void setJobStatus(String jobStatus) {        this.jobStatus = jobStatus;    }    public String getDesc() {        return desc;    }    public void setDesc(String desc) {        this.desc = desc;    }}
package test;import org.quartz.JobExecutionContext;public class TestJob extends BaseJob {    @Override    void doJob(JobExecutionContext context) {        System.err.println("-------我是job1执行了-----------");    }}
0 0
原创粉丝点击