quartz 集羣化任務。 web增刪改查任務 並且暫停繼續任務。

一、Quartz集羣化使用

二、web增刪改查任務 並且暫停啓動任務。

這裏寫一個增刪改查任務、任務啓停的簡單的類,實際應用中1、記得持久化任務。2、持久化jobParam類。這裏只是展示怎樣增刪改查和啓停

package com.back.scheduler;


import com.back.scheduler.job.BackJob;
import com.back.scheduler.manager.JobParam;
import com.google.common.collect.Lists;
import com.weibo.api.motan.util.CollectionUtil;
import lombok.extern.slf4j.Slf4j;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.matchers.GroupMatcher;

import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;

import static org.quartz.JobBuilder.*;
import static org.quartz.TriggerBuilder.*;
import static org.quartz.CronScheduleBuilder.*;

@Slf4j
public class SchedulerManager {

    public final static String DEFAULT_GROUP = "DODP";
    public static Scheduler defaultScheduler = initScheduler();
    private static Scheduler initScheduler() {
        try {
            SchedulerFactory factory =  new StdSchedulerFactory();
            Scheduler scheduler = factory.getScheduler();
            scheduler.start();
            return scheduler;
        } catch (SchedulerException e) {
            log.error("Scheduler Error!");
            throw new RuntimeException("Scheduler Error!");
        }
    }

    /**
     * 新增任務
     * @param param
     */
    public void addJob(JobParam param){
        if(param.getJobtype() == JobParam.JobType.cron){
            Class<? extends Job> aClass = null;
            try {
                aClass  = (Class<? extends Job>) Class.forName(param.getJobClassName());
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }

            JobDetail job = newJob(aClass).withIdentity(param.getJobKey(), DEFAULT_GROUP).build();
            if(param.getParams().size() > 0){
                JobDataMap jobDataMap = job.getJobDataMap();
                param.getParams().forEach((k,v) -> {
                    jobDataMap.putIfAbsent(k,v);
                });
            }
            CronTrigger build = newTrigger().withIdentity(param.getTriggerKey(), DEFAULT_GROUP)
                    .withSchedule(cronSchedule(param.getCron())).build();
            try {
                defaultScheduler.scheduleJob(job, build);
            } catch (SchedulerException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 刪除任務
     * @param jobKey
     * @param groupName
     */
    public void deleteJob(String jobKey,String groupName){
        JobKey jobKey1 = new JobKey(jobKey, groupName);
        try {
            defaultScheduler.deleteJob(jobKey1);
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }

    /**
     * 修改任務
     * @param jobKey
     * @param groupName
     * @param corn
     */
    public void updateJobCorn(String jobKey,String groupName,String corn){
        JobKey jobKey1 = new JobKey(jobKey, groupName);
        try {
            JobDetail jobDetail = defaultScheduler.getJobDetail(jobKey1);
            CronTrigger build = newTrigger().withSchedule(cronSchedule(corn)).build();
            defaultScheduler.deleteJob(jobKey1);
            defaultScheduler.scheduleJob(jobDetail,build);
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }

    /**
     * 查詢所有任務
     * @return
     */
    public List<JobParam> selectAllJob(){
        try {
            List<JobParam> result = Lists.newArrayList();
            GroupMatcher<JobKey> matcher = GroupMatcher.anyJobGroup();
            Set<JobKey> jobKeys = defaultScheduler.getJobKeys(matcher);
            for (JobKey key : jobKeys){
                List<? extends Trigger> triggersOfJob = defaultScheduler.getTriggersOfJob(key);
                for (Trigger trigger : triggersOfJob){
                    JobParam jobParam = new JobParam();
                    jobParam.setJobKey(key.getName());
                    jobParam.setTriggerKey(trigger.getKey().getName());
                    if(trigger instanceof CronTrigger){
                        jobParam.setJobtype(JobParam.JobType.cron);
                    }
                    JobDetail jobDetail = defaultScheduler.getJobDetail(key);
                    jobParam.setJobClassName(jobDetail.getJobClass().getName());
                    jobParam.setParams(jobDetail.getJobDataMap());
                    result.add(jobParam);
                }
            }
            return result;
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 暫停任務
     * @param jobKey
     * @param groupName
     */
    public void stopJob(String jobKey,String groupName){
        JobKey jobKey1 = new JobKey(jobKey, groupName);
        try {
            defaultScheduler.pauseJob(jobKey1);
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }

    /**
     * 任務啓動
     * @param jobKey
     * @param groupName
     */
    public void resumeJob(String jobKey,String groupName){
        JobKey jobKey1 = new JobKey(jobKey, groupName);
        try {
            defaultScheduler.resumeJob(jobKey1);
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }


    public static void main(String[] args) throws InterruptedException {

        SchedulerManager schedulerManager = new SchedulerManager();
        JobParam jobParam = new JobParam();
        jobParam.setId(1L);
        jobParam.setCron("0/2 * * * * ?");
        jobParam.setJobKey("job1");
        jobParam.setTriggerKey("trigger1");
        jobParam.setJobtype(JobParam.JobType.cron);
        jobParam.setJobClassName(BackJob.class.getName());
        jobParam.getParams().put(BackJob.BACK_JOB_KEY,new Date());
        schedulerManager.addJob(jobParam);
        JobParam jobParam2 = new JobParam();
        jobParam2.setId(2L);
        jobParam2.setCron("0/3 * * * * ?");
        jobParam2.setJobKey("job2");
        jobParam2.setTriggerKey("trigger2");
        jobParam2.setJobtype(JobParam.JobType.cron);
        jobParam2.setJobClassName(BackJob.class.getName());
        jobParam2.getParams().put(BackJob.BACK_JOB_KEY,new Date());
        schedulerManager.addJob(jobParam2);
        TimeUnit.SECONDS.sleep(5);
        schedulerManager.deleteJob("job1",DEFAULT_GROUP);

        TimeUnit.SECONDS.sleep(5);
        schedulerManager.updateJobCorn("job2",DEFAULT_GROUP,"0/5 * * * * ?");
        TimeUnit.SECONDS.sleep(5);
        List<JobParam> jobDetails = schedulerManager.selectAllJob();
        for (JobParam job : jobDetails){
            System.out.println(job);
        }
        schedulerManager.stopJob("job2",DEFAULT_GROUP);
        TimeUnit.SECONDS.sleep(10);
        schedulerManager.resumeJob("job2",DEFAULT_GROUP);


    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章