動態改變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 /次,


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

覺得不錯請點贊支持,歡迎留言或進我的個人羣855801563領取【架構資料專題目合集90期】、【BATJTMD大廠JAVA面試真題1000+】,本羣專用於學習交流技術、分享面試機會,拒絕廣告,我也會在羣內不定期答題、探討

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章