全网最全quartz工具类,SpringBoot 集成 Quartz (java)

@Data
public class QuartzTask<T extends Trigger> implements Serializable {
    private static final long serialVersionUID = 1L;
    private ScheduleBuilder<T> scheduleBuilder;
    private Date startTime;
    private Date  endTime;
    private String  timezone;

    public QuartzTask(ScheduleBuilder<T> scheduleBuilder, Date startTime, Date endTime) {
        this.scheduleBuilder = scheduleBuilder;
        this.startTime = startTime;
        this.endTime = endTime;
    }

    public QuartzTask(Date startTime, Date endTime) {
        this.startTime = startTime;
        this.endTime = endTime;
    }
}


    private Scheduler scheduler;

    //添加任务
    public void addScheduleJob(JobKey jobKey, Class clazz, List<QuartzTask> taskList, JobDataMap jobDataMap) {
        try {
            JobDetail jobDetail = JobBuilder
                    .newJob(clazz).withIdentity(jobKey).storeDurably(true).build();
            if (scheduler.checkExists(jobDetail.getKey()))
                throw new SchedulerException("job is already exists");
            scheduler.addJob(jobDetail, true);
            addJobTrigger(jobKey,taskList);
        } catch (SchedulerException e) {
            throw new RuntimeException(e.getMessage());
        }
    }
    //暂停任务
    public void pauseScheduleJob(JobKey jobKey) {
        try {
            if (!scheduler.checkExists(jobKey))
                throw new SchedulerException("job is not exists");
                scheduler.pauseJob(jobKey);
        } catch (SchedulerException e) {
            throw new RuntimeException(e.getMessage());
        }
    }
    //删除任务
    public void delScheduleJob (JobKey jobKey) {
        try {
            pauseScheduleJob(jobKey);
            scheduler.deleteJob(jobKey);
        } catch (SchedulerException e) {
            throw new RuntimeException(e.getMessage());
        }
    }
    //恢复任务
    public void  resumeScheduleJob(JobKey jobKey){
        try {
            pauseScheduleJob(jobKey);
            scheduler.resumeJob(jobKey);
        } catch (SchedulerException e) {
            throw new RuntimeException(e.getMessage());
        }
    }
    //更新任务(仅对原有任务的trigger变更实际的开始时间和结束时间)
    public void updateScheduleJob(JobKey jobKey, Class clazz, QuartzTask task, JobDataMap jobDataMap){
        try {
            if (!scheduler.checkExists(jobKey)) {
                throw new RuntimeException("job is not exist");
            } else {
                List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey);
                for (Trigger trigger : triggers) {
                    Trigger newTrigger = trigger.getTriggerBuilder().startNow()
                            .startAt(task.getStartTime()).endAt(task.getEndTime())
                            .build();
                    scheduler.rescheduleJob(trigger.getKey(),newTrigger);
                }
            }
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage());
        }
    }
    //批量暂停job
    public void batchPauseJobs(List<JobKey> jobKeyList){
        if(jobKeyList.size()==0)
                throw new RuntimeException("job list is empty");
        for (JobKey jobKey : jobKeyList) {
            pauseScheduleJob(jobKey);
        }
    }
    public void batchPauseJobs(List<String> groupList,String method){
        if (!"group".equalsIgnoreCase(method))
            throw new RuntimeException("only support method group");
        if(groupList.size()==0)
            throw new RuntimeException("group list is empty");
        for (String group : groupList) {
            try {
                scheduler.pauseJobs(GroupMatcher.groupEquals(group));
            } catch (SchedulerException e) {
                throw new RuntimeException(e.getMessage());
            }
        }
    }
    //批量恢复任务
    public void batchResumeJobs(List<JobKey> jobKeyList){
        batchPauseJobs(jobKeyList);
        for (JobKey jobKey : jobKeyList) {
            resumeScheduleJob(jobKey);
        }
    }
    public void batchResumeJobs(List<String> groupList,String method){
        batchPauseJobs(groupList,method);
        for (String group : groupList) {
            try {
                scheduler.resumeJobs(GroupMatcher.groupEquals(group));
            } catch (SchedulerException e) {
                throw new RuntimeException(e.getMessage());
            }
        }
    }
    //批量删除job
    public void batchDelJobs(List<JobKey> jobKeyList){
        batchPauseJobs(jobKeyList);
        try {
            scheduler.deleteJobs(jobKeyList);
        } catch (SchedulerException e) {
            throw new RuntimeException(e.getMessage());
        }
    }

    //添加trigger
    public void addJobTrigger(JobKey jobKey,List<QuartzTask> taskList){
        try {
            if (!scheduler.checkExists(jobKey))
                throw new SchedulerException("job is not exists");
            int size = scheduler.getTriggersOfJob(jobKey).size();
            for (QuartzTask task : taskList) {
                //创建任务触发器
                Trigger trigger = TriggerBuilder.newTrigger()
                        .withIdentity(jobKey.getName()+(size+taskList.indexOf(task)+1), jobKey.getGroup())
                        .withSchedule(task.getScheduleBuilder())
                        .startNow().forJob(jobKey)
                        .startAt(task.getStartTime()).endAt(task.getEndTime())
                        .build();
                //将触发器与任务绑定到调度器内
                scheduler.scheduleJob(trigger);
            }
        } catch (SchedulerException e) {
            throw new RuntimeException(e.getMessage());
        }
    }
    //暂停trigger
    public void pauseJobTrigger(TriggerKey triggerKey) {
        try {
            if (!scheduler.checkExists(triggerKey))
                throw new SchedulerException("trigger is not exists");
            scheduler.pauseTrigger(triggerKey);
        } catch (SchedulerException e) {
            throw new RuntimeException(e.getMessage());
        }
    }
    //更新trigger(更新trigger)
    public void updateJobTrigger(TriggerKey triggerKey, QuartzTask task) {
        try {
            if (!scheduler.checkExists(triggerKey))
                throw new SchedulerException("trigger is not exists");
            Trigger newTrigger = scheduler.getTrigger(triggerKey).getTriggerBuilder()
                    .withSchedule(task.getScheduleBuilder())
                    .startNow().startAt(task.getStartTime()).endAt(task.getEndTime()).build();
            scheduler.rescheduleJob(triggerKey,newTrigger);
        } catch (SchedulerException e) {
            throw new RuntimeException(e.getMessage());
        }
    }
    //恢复trigger
    public void resumeJobTrigger(TriggerKey triggerKey){
        try {
            if (!scheduler.checkExists(triggerKey))
                throw new SchedulerException("trigger is not exists");
            scheduler.resumeTrigger(triggerKey);
        } catch (SchedulerException e) {
            throw new RuntimeException(e.getMessage());
        }
    }
    //删除trigger
    public void delJobTrigger(TriggerKey triggerKey){
        try {
            pauseJobTrigger(triggerKey);
            scheduler.unscheduleJob(triggerKey);
        } catch (SchedulerException e) {
            throw new RuntimeException(e.getMessage());
        }
    }
    //批量暂停trigger
    public void batchPauseTriggers(List<TriggerKey> triggerKeyList){
        if(triggerKeyList.size()==0)
            throw  new  RuntimeException("trigger list is empty");
        for (TriggerKey triggerKey : triggerKeyList) {
            pauseJobTrigger(triggerKey);
        }
    }
    public void batchPauseTriggers(List<String> groupList,String method){
        if (!"group".equalsIgnoreCase(method))
            throw new RuntimeException("only support method group");
        if(groupList.size()==0)
            throw new RuntimeException("group list is empty");
        for (String group : groupList) {
            try {
                scheduler.pauseTriggers(GroupMatcher.groupEquals(group));
            } catch (SchedulerException e) {
                throw new RuntimeException(e.getMessage());
            }
        }
    }
    //批量恢复trigger
    public void batchResumeTriggers(List<TriggerKey> triggerKeyList){
        batchPauseTriggers(triggerKeyList);
        for (TriggerKey triggerKey : triggerKeyList) {
            resumeJobTrigger(triggerKey);
        }
    }
    public void batchResumeTriggers(List<String> groupList,String method){
        batchPauseTriggers(groupList,method);
        for (String group : groupList) {
            try {
                scheduler.resumeTriggers(GroupMatcher.groupEquals(group));
            } catch (SchedulerException e) {
                throw new RuntimeException(e.getMessage());
            }
        }
    }
    //批量删除trigger
    public void batchDelTriggers(List<TriggerKey> triggerKeyList){
        batchPauseTriggers(triggerKeyList);
        try {
            scheduler.unscheduleJobs(triggerKeyList);
        } catch (SchedulerException e) {
            throw new RuntimeException(e.getMessage());
        }
    }

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值