麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Java > 正文

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

2024-07-14 08:42:26
字體:
來源:轉載
供稿:網友

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。需要在其中執行定時任務如下:

//注釋作用,當上一個任務未結束時下一個任務需進行等待@DisallowConcurrentExecutionpublic 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:點擊打開鏈接

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


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永久免费不卡在线观看黄网站 | 国产精品成人一区二区三区吃奶 | 精国产品一区二区三区四季综 | 欧美精品免费一区二区三区 | 亚洲精中文字幕二区三区 | xnxx 日本19 | 亚洲综合视频在线播放 | 欧美日本综合 | 九艹在线 | 国产做爰 | 久久人操| 欧洲精品久久久久69精品 | 成人福利网 | 91国在线高清视频 | 国色天香综合网 | 极色品影院| 国产色爱综合网 | 午夜精品福利视频 | 免费观看一级 | 欧美黄色看 | 成人在线97 | 亚洲日本欧美 | 国产成人在线一区二区 | 欧美成人午夜精品久久久 | 成人视屏在线 | 亚洲天堂午夜 | 在线观看国产一区二区 | 男女一边摸一边做羞羞视频免费 | 男人久久天堂 | 久久久久久久久久亚洲 | 哪里可以看免费的av | 91亚洲精品一区二区福利 | 国产乱色精品成人免费视频 | 日韩精品二区 | 亚洲特黄 | 欧美一级片一区 | 久久国产精品一区 | 一本视频在线观看 | 91成人在线免费观看 | 久久久久久久久久美女 | 色淫视频 |