Quartz 工具类

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执行了-----------");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值