quartz 操作

我們先封裝一個作業調度實體類:jobTrigger

private String key; //唯一key
private String jobName; //任務名字
private String jobGroup; //任務組別
private String jobClassName; //執行的類名
private String triggerName; //觸發器名字
private String triggerGroup; //觸發器組別
private String cronExpession; // cron表達式
private Bool runState; //啓動狀態
private Date timesTriggered; //起始時間
private Date endTimeTriggered; //結束時間
private Long repeatCount; //重複次數
private Long repeatInterval; //間隔
private Bool isCron; //是否cron

 

 引用

  @Autowired
  private Scheduler scheduler;

1.初始化 觸發器 

  注意:起始時間如果少於當前時間,在執行 

scheduler.scheduleJob(jobDetail, trigger);
後會立即將任務執行一次.

觸發器只介紹了 簡單模式和cron 兩種模式,看代碼

 private  Trigger initTrigger(JobTrigger jobTrigger) {
        TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
        String triggerName = jobTrigger.triggerName;
        String triggerGroup = jobTrigger.triggerGroup; 
        triggerBuilder.withIdentity(triggerName, triggerGroup); 
        if(DataUtil.isNotEmpty(jobTrigger.timesTriggered))
        {
            if(jobTrigger.timesTriggered<new Date())
            {
                triggerBuilder.startNow();
            }
            else
            {
                Date startAt = new Date();
                triggerBuilder.startAt(startAt);
            }
        }
        else
        {
            triggerBuilder.startNow();
        }
        if(DataUtil.isNotEmpty(jobTrigger.endTimeTriggered))
        {
            Date endAt = jobTrigger.endTimeTriggered;
            triggerBuilder.endAt(endAt); 
        }

       if(jobTrigger.isCron)
       {
 triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(jobTrigger.cronExpession));
       }
       else{
           SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.simpleSchedule();   simpleScheduleBuilder.withIntervalInSeconds(jobTrigger.getSjtRepeatInterval().intValue());
           if(jobTrigger.repeatCount>0)
           {
               simpleScheduleBuilder.withRepeatCount(jobTrigger.repeatCount);
           }
           else
           {
               simpleScheduleBuilder.repeatForever();
           }
           triggerBuilder.withSchedule(simpleScheduleBuilder);
       }
        Trigger trigger = triggerBuilder.build();
        return trigger;
    }

2.初始化 觸發器

 private  JobDetail initJobDetail(JobTrigger jobTrigger){
            String JobName =jobTrigger.jobName;
            String JobGroup = jobTrigger.jobGroup;
            Class<? extends BaseJob> jobClass = (Class<? extends BaseJob>)Class.forName(jobTrigger.jobClassName());
            JobDetail jobDetail = JobBuilder.newJob(jobClass)
                    .withIdentity(JobName, JobGroup).withDescription(jobTrigger.getSjtJobName())
                    .build();
            return jobDetail;
    }

 3.新增任務

 public void addJob(JobTrigger jobTrigger) {
        JobDetail jobDetail = initJobDetail(jobTrigger);
        Trigger trigger = initTrigger(jobTrigger);
        if (DataUtil.isNotEmpty(jobDetail) && DataUtil.isNotEmpty(trigger)) {

                if (!scheduler.checkExists(trigger.getKey())) {

                    scheduler.scheduleJob(jobDetail, trigger);// 設置調度相關的Job
                }
                if (jobTrigger.runState) {
                    scheduler.resumeJob(jobDetail.getKey()); //啓動

                } else {
                    scheduler.pauseJob(jobDetail.getKey());//停止
                }
         
        }
    }

4.修改任務 觸發時間

 public  void modifyJobTime(JobTrigger jobTrigger) {
        String triggerName = jobTrigger.triggerName;
            String triggerGroup =jobTrigger.triggerGroup; 
            TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroup);
            CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
            if (trigger == null) {
                return;
            }
            Trigger newTrigger =  this.initTrigger(jobTrigger);
            scheduler.rescheduleJob(triggerKey, newTrigger);
    }

5.移除任務

  public  void removeJob(JobTrigger jobTrigger) {
            String triggerName = jobTrigger.triggerName;
            String triggerGroup =jobTrigger.triggerGroup;
            String JobName =jobTrigger.jobName;
            String JobGroup = jobTrigger.jobGroup; 
            TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroup);
            JobKey  jobKey =  JobKey.jobKey(JobName,JobGroup);
            // 停止觸發器
            scheduler.pauseTrigger(triggerKey);
            // 移除觸發器
            scheduler.unscheduleJob(triggerKey);
            // 刪除任務
            scheduler.pauseJob(jobKey);
            scheduler.deleteJob(jobKey);
    }

6.啓動所有的定時任務

scheduler.start();

7 .關閉任務

scheduler.shutdown();

8 立即執行任務

public void executionJob(JobTrigger jobTrigger) throws  Exception {
        String JobName = jobTrigger.jobName;
        String JobGroup = jobTrigger.jobGroup;
        JobKey jobKey = JobKey.jobKey(JobName, JobGroup);
        if (this.scheduler.checkExists(jobKey)) {
            this.scheduler.triggerJob(jobKey);
        }
    }

9.暫停所有任務

scheduler.pauseAll();

10 .暫停任務

  public  void pauseJob(JobTrigger jobTrigger) throws SchedulerException
    {
        String JobName =jobTrigger.jobName;
        String JobGroup = jobTrigger.jobGroup;
        JobKey jobKey= JobKey.jobKey(JobName,JobGroup);
        String triggerName =  jobTrigger.triggerName;
        String triggerGroup =  jobTrigger.triggerGroup; 
        TriggerKey triggerKey = TriggerKey.triggerKey(triggerName,triggerGroup); 
        scheduler.pauseJob(jobKey);
        scheduler.pauseTrigger(triggerKey);
    }

11.重啓所有任務

scheduler.resumeAll();

12.清理所有的任務

scheduler.clear();

13.重啓任務

 public  void resumeJob(JobTrigger jobTrigger) throws SchedulerException { 
        String JobName = jobTrigger.jobName;
        String JobGroup =jobTrigger.jobGroup; 
        String triggerName = jobTrigger.triggerName();
        String triggerGroup = jobTrigger.triggerGroup(); 
        JobKey jobKey = JobKey.jobKey(JobName, JobGroup);
        TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroup);
        if (!this.scheduler.checkExists(triggerKey)&&!this.scheduler.checkExists(jobKey)) {
            this.addJob(jobTrigger);
        }
        if (this.scheduler.checkExists(triggerKey)) {
            scheduler.resumeTrigger(triggerKey);
        }
        if (this.scheduler.checkExists(jobKey)) {
            scheduler.resumeJob(jobKey);
        }
    }

 

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