激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - springboot Quartz動態修改cron表達式的方法

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

2021-06-02 13:58追風的獨角鯨 Java教程

這篇文章主要介紹了springboot Quartz動態修改cron表達式的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

2、關聯技術 springboot、quartz、h2、thymeleaf (好像就這么多)

3、具體流程      

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

?
1
2
3
4
5
6
7
8
9
@bean
 public schedulerfactorybean schedulerfactory(){
   schedulerfactorybean factorybean = new schedulerfactorybean();
   /*用于quartz集群,啟動時更新已存在的job*/
   factorybean.setoverwriteexistingjobs(true);
   /*定時任務開始啟動后延遲5秒開始*/
   factorybean.setstartupdelay(5);
   return factorybean;
 }

2)獲取到

?
1
2
//得到調度器
scheduler scheduler = schedulerfactorybean.getscheduler();

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

?
1
2
3
//獲得觸發器
triggerkey triggerkey = triggerkey.triggerkey(config.getname(), config.getgroup());
crontrigger trigger = (crontrigger)scheduler.gettrigger(triggerkey);

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

?
1
2
3
4
5
6
7
8
9
10
11
//注釋作用,當上一個任務未結束時下一個任務需進行等待
@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中進行解讀的

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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

?
1
2
3
4
5
6
//將cron表達式進行轉換   
cronschedulebuilder cronschedulebuilder = cronschedulebuilder.cronschedule(config.getcron());  
//創建觸發器并將cron表達式對象給塞入
trigger = triggerbuilder.newtrigger().withidentity(triggerkey).withschedule(cronschedulebuilder).build();
//在調度器中將觸發器和任務進行組合
scheduler.schedulejob(jobdetail,trigger);

github:點擊打開鏈接

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

原文鏈接:https://blog.csdn.net/zhu714702382/article/details/79391437

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲va久久久噜噜噜久久男同 | 久久久久久亚洲综合影院红桃 | 欧美三级日本三级少妇99 | 99久久久精品国产一区二区 | 欧美精品免费一区二区三区 | 精品国产一区二区三区久久久狼牙 | 久久精品超碰 | hdhdhdhd19日本人 | 欧美电影在线观看 | 一区二区视 | xxxeexxx性国产 | 日韩在线播放一区二区 | 亚洲一区成人 | 欧美视频一区二区三区四区 | 日韩精品中文字幕一区二区三区 | 偿还电影免费看 | av日韩在线免费观看 | 99久在线视频 | 日本在线不卡一区二区三区 | 国产一级桃视频播放 | 国产日韩精品欧美一区视频 | 一区二区三区日韩在线 | 国产自在线 | 国产精品成人久久久久a级 av电影在线免费 | 黄色片观看 | 久久久久久久久久久久网站 | 国产chinesehd精品91| 色播视频在线播放 | 高清一区二区在线观看 | 国产成人高清在线观看 | 成人影片在线免费观看 | 国产做爰全免费的视频黑人 | 久久激情免费视频 | 国产乱一区二区三区视频 | 黄色7777| 深夜福利视频免费观看 | 哪里可以看免费的av | 久久精品中文 | 亚洲αv| 日韩精品久久久久久久电影99爱 | 毛片韩国 |