欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot Quartz動態(tài)修改cron表達(dá)式的方法

 更新時間:2018年09月29日 10:21:21   作者:追風(fēng)的獨角鯨  
這篇文章主要介紹了springboot Quartz動態(tài)修改cron表達(dá)式的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

2、關(guān)聯(lián)技術(shù) SpringBoot、Quartz、H2、thymeleaf (好像就這么多)

3、具體流程      

1)首先去手動創(chuàng)建一個調(diào)度器工廠對象-SchedulerFactoryBean;其實應(yīng)該不用手動創(chuàng)建的但是為了顧及到業(yè)務(wù)的復(fù)雜性所以還是創(chuàng)建一個好用。

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

2)獲取到

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

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

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

4)創(chuàng)建一個任務(wù)類需要繼承Job,實現(xiàn)方法execute。需要在其中執(zhí)行定時任務(wù)如下:

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

5)將執(zhí)行實例添加到任務(wù)當(dāng)中去,我在例子是將執(zhí)行任務(wù)的信息封裝到了對象config當(dāng)中然后在任務(wù)QuartzJobFactoryz中進(jìn)行解讀的

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");  
   }   
   //方法執(zhí)行

    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)創(chuàng)建觸發(fā)器并且綁定cron表達(dá)式

7)在調(diào)度器中將觸發(fā)器和任務(wù)進(jìn)行組合 詳情見:com.study.www.service.QuartzTableservice.addJob

  //將cron表達(dá)式進(jìn)行轉(zhuǎn)換    
  CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(config.getCron());   
  //創(chuàng)建觸發(fā)器并將cron表達(dá)式對象給塞入
  trigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
  //在調(diào)度器中將觸發(fā)器和任務(wù)進(jìn)行組合
  scheduler.scheduleJob(jobDetail,trigger);

github:點擊打開鏈接

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Spring Boot 集成Shiro和CAS

    詳解Spring Boot 集成Shiro和CAS

    這篇文章主要介紹了詳解Spring Boot 集成Shiro和CAS,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 分布式任務(wù)調(diào)度xxl-job問題解決

    分布式任務(wù)調(diào)度xxl-job問題解決

    這篇文章主要為大家介紹了分布式任務(wù)調(diào)度xxl-job的問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多多多進(jìn)步,早日升職加薪
    2022-03-03
  • 詳解Java匿名內(nèi)部類

    詳解Java匿名內(nèi)部類

    這篇文章介紹了Java匿名內(nèi)部類的實現(xiàn),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • Spring Hibernate實現(xiàn)分頁功能

    Spring Hibernate實現(xiàn)分頁功能

    這篇文章主要為大家詳細(xì)介紹了Spring Hibernate實現(xiàn)分頁功能的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Java實戰(zhàn)之郵件的撰寫和發(fā)送

    Java實戰(zhàn)之郵件的撰寫和發(fā)送

    這篇文章主要為大家詳細(xì)介紹了通過Java代碼實現(xiàn)郵件的撰寫和發(fā)送功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,需要的小伙伴們可以學(xué)習(xí)一下
    2021-11-11
  • SpringMVC訪問靜態(tài)資源的三種方式小結(jié)

    SpringMVC訪問靜態(tài)資源的三種方式小結(jié)

    這篇文章主要介紹了SpringMVC訪問靜態(tài)資源的三種方式小結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 關(guān)于Java鎖性能提高(鎖升級)機制的總結(jié)

    關(guān)于Java鎖性能提高(鎖升級)機制的總結(jié)

    這篇文章主要介紹了關(guān)于Java鎖性能提高(鎖升級)機制的總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java動態(tài)規(guī)劃之硬幣找零問題實現(xiàn)代碼

    Java動態(tài)規(guī)劃之硬幣找零問題實現(xiàn)代碼

    這篇文章主要介紹了Java動態(tài)規(guī)劃之硬幣找零問題實現(xiàn)代碼,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • SpringBoot多線程進(jìn)行異步請求的處理方式

    SpringBoot多線程進(jìn)行異步請求的處理方式

    這篇文章主要介紹了SpringBoot多線程進(jìn)行異步請求的處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜
    2021-12-12
  • 詳解Java的Struts框架中上傳文件和客戶端驗證的實現(xiàn)

    詳解Java的Struts框架中上傳文件和客戶端驗證的實現(xiàn)

    這篇文章主要介紹了Java的Struts框架中上傳文件和客戶端驗證的實現(xiàn),Struts是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12

最新評論