91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot Quartz動態修改cron表達式的方法

發布時間:2020-09-22 17:36:11 來源:腳本之家 閱讀:190 作者:追風的獨角鯨 欄目:編程語言

1、概述: 在開發中有的時候需要去手動禁止和啟用定時任務,修改定時任務的cron表達式然后再讓其動態生效,之前有過SSM的類似的業務的開發但是忘記寫下來了。。。只好重新溫習了一次,加上最近比較流行springBoot所以升級了一下用springBoot來完成.

2、關聯技術 SpringBoot、Quartz、H2、thymeleaf (好像就這么多)

3、具體流程      

1)首先去手動創建一個調度器工廠對象-SchedulerFactoryBean;其實應該不用手動創建的但是為了顧及到業務的復雜性所以還是創建一個好用。

 @Bean
  public SchedulerFactoryBean schedulerFactory(){
    SchedulerFactoryBean factoryBean = new SchedulerFactoryBean();
    /*用于Quartz集群,啟動時更新已存在的Job*/
    factoryBean.setOverwriteExistingJobs(true);
    /*定時任務開始啟動后延遲5秒開始*/
    factoryBean.setStartupDelay(5);
    return factoryBean;
  }

2)獲取到

//得到調度器
Scheduler scheduler = schedulerFactoryBean.getScheduler();

3)判斷是否有觸發器-trigger存在其中,因為有可能說上次的觸發器 并沒有刪除

//獲得觸發器
TriggerKey triggerKey = TriggerKey.triggerKey(config.getName(), config.getGroup());
CronTrigger trigger = (CronTrigger)scheduler.getTrigger(triggerKey);

4)創建一個任務類需要繼承Job,實現方法execute。需要在其中執行定時任務如下:

//注釋作用,當上一個任務未結束時下一個任務需進行等待
@DisallowConcurrentExecution
public class QuartzJobFactory implements Job {
  public static final  String SCHEDULEJOBKEY="scheduleJob";
  //execute會根據cron的規則進行執行
  @Override
  public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {   
        Config config = (Config) jobExecutionContext.getMergedJobDataMap().get(SCHEDULEJOBKEY);
        TaskUtils.invokMethod(config);
    }
}

5)將執行實例添加到任務當中去,我在例子是將執行任務的信息封裝到了對象config當中然后在任務QuartzJobFactoryz中進行解讀的

public static void invokMethod(Config config){
    Object obj=null;
    Class clazz=null;
    //通過Spring上下文去找 也有可能找不到
   try {
      obj= SpringUtils.getBean(config.getClassPath().split("\\.")[config.getClassPath().split("\\.").length - 1]);
   if (obj == null){
        clazz = Class.forName(config.getClassPath());
        obj = clazz.newInstance();
      }else{
       clazz =obj.getClass();
      }
    }catch (Exception e){
 throw new RuntimeException("ERROR:TaskUtils is Bean Create please check the classpath is`t right or not");
    }
 Method method=null;
    //獲得方法名
    try {
      method = clazz.getDeclaredMethod(config.getMethodName());
   } catch (NoSuchMethodException e) {   
   throw new RuntimeException("ERROR:TaskUtils is Bean the method Create please check the methodName is`t right or not");  
   }   
   //方法執行

    try {
      method.invoke(obj);
    } catch (Exception e) {
   throw new RuntimeException("ERROR:TaskUtils is Bean the method execute please check the methodName is`t right or not");
    }
  }

6)創建觸發器并且綁定cron表達式

7)在調度器中將觸發器和任務進行組合 詳情見:com.study.www.service.QuartzTableservice.addJob

  //將cron表達式進行轉換    
  CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(config.getCron());   
  //創建觸發器并將cron表達式對象給塞入
  trigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
  //在調度器中將觸發器和任務進行組合
  scheduler.scheduleJob(jobDetail,trigger);

github:點擊打開鏈接

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

斗六市| 红河县| 新建县| 伊金霍洛旗| 新绛县| 扶绥县| 邢台县| 黄大仙区| 如皋市| 宣汉县| 新绛县| 磴口县| 南投市| 石柱| 吐鲁番市| 金川县| 米林县| 新泰市| 乌兰察布市| 根河市| 通城县| 南皮县| 团风县| 新宾| 宁海县| 吴堡县| 梅河口市| 日照市| 钟祥市| 巴塘县| 宣武区| 胶南市| 黄冈市| 新田县| 平乐县| 宜州市| 剑阁县| 罗田县| 广德县| 乌拉特前旗| 城步|