動態改變Spring定時任務執行頻率

動態改變Spring定時任務執行頻率

一.引入

    由於公司門戶系統需要定時推送數據進國家平臺,所以首先想到的是利用spring的定時任務進行定時推送,當然對於這種需求比較簡單,如下操作即可:

    1.打開任務調度使用,在applicationContext.xml中添加  <task:annotation-driven />,即配置打開了任務調度

當然注意了:頭文件上需要加上

<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:task="http://www.springframework.org/schema/task"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xsi:schemaLocation="  
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd   
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd ">



    2.自定義一個 任務調度的類,這裏我寫爲了:MyScheduler.java ,爲了讓spring能夠管理到,加上了Component註解,然後方法上加上Scheduled註解,進行配置調度的頻率(1000*60)-代表1分鐘調用一次

          @Component("scheduledTaskManager")
          public class MyScheduler {

           @Scheduled(fixedRate = 1000*60)
           public void heartbeat() {
        //任務邏輯

             }
         }


這樣配置就結束了,很簡單明瞭。


二.動態修改調度頻率

    通過上述的配置,已經實現了簡單的定時任務調度,但是這中寫法不適宜動態修改,至少我還沒有按照上述的寫法動態修改頻率成功過,於是,這裏寫一下另外一種寫法:

    定義一個任務類:updateCronTask.java,這個類實現SchedulingConfigurer接口的configureTasks方法

    @Component
    @EnableScheduling
    public class updateCronTask implements SchedulingConfigurer {  
       
        public static String cron = "0/2 * * * * ?";  
        int i=0;
    
        @Override  
        public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
            taskRegistrar.addTriggerTask(new Runnable() {  
            @Override  
            public void run(){
            i++;
                // 任務邏輯  
            System.out.println("第"+(i)+"次開始執行操作... " +"時間:【" + new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS").format(new Date()) + "】");
                
            }
        }, new Trigger(){
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                //任務觸發,可修改任務的執行週期 
                CronTrigger trigger = new CronTrigger(cron);
                Date nextExec = trigger.nextExecutionTime(triggerContext);
                return nextExec;  
            }
        });
    }
}



項目啓動後,只要觸發改變cron的參數即可實現動態 修改任務調度頻率,如:測試在controller層中,當訪問了 某個url後,觸發改變了cron 的參數,達到了預期的效果。

開始默認的頻率是2s /次,後來通過controller層進行修改成了10s /次,


如果你有更好的方法,記得分享出來。



發佈了48 篇原創文章 · 獲贊 74 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章