一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

服務器之家 - 編程語言 - Java教程 - Spring Task 動態修改任務執行計劃cron方式

Spring Task 動態修改任務執行計劃cron方式

2022-03-08 14:07疊影 Java教程

這篇文章主要介紹了Spring Task 動態修改任務執行計劃cron方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Spring Task 動態修改任務執行計劃cron

Spring Task 能夠在不重啟服務的情況下,動態修改批量任務執行時間。

原理

Spring Task目前僅支持TriggerContext上修改下次執行時間(批量任務執行后回調SchedulingConfigurer.configureTasks,讓用戶可以重新設置Trigger,從而動態修改下次執行時間)),這種方法的弊端就是“執行時間不能實時生效”。

為此,看了下task文檔,感覺若要實現實時生效功能,必須代碼里手工啟動/停止Spring task任務。

Demo如下

首先,xml里不需要配置springTask相關的executor和scheduler。其次,在代碼里自定義scheduler和taskRegistrar(SpringTask啟動的類)。最后,開個線程,模擬動態修改cron表達式的接口。

Spring Task 動態修改任務執行計劃cron方式

輸出如下:(35min沒有執行原task)

INFO 27-11 14:34:10,476 - Initializing ExecutorService
INFO 27-11 14:34:10,484 - nextExecutionTime: 0 35 14 * * ?
修改cron為: 0 36 14 * * ?
INFO 27-11 14:34:20,487 - Initializing ExecutorService
INFO 27-11 14:34:20,488 - nextExecutionTime: 0 36 14 * * ?
INFO 27-11 14:36:00,001 - dynamicCronTask is running...
INFO 27-11 14:36:00,001 - nextExecutionTime: 0 36 14 * * ?

Spring @Scheduled定時任務動態修改cron參數

  • 在定時任務類上增加@EnableScheduling注解,并實現SchedulingConfigurer接口。(注意低版本無效)
  • 設置一個靜態變量cron,用于存放任務執行周期參數。
  • 另辟一線程,用于模擬實際業務中外部原因修改了任務執行周期。
  • 設置任務觸發器,觸發任務執行,其中就可以修改任務的執行周期。

Class : SpringDynamicCornTask

?
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package com.xindatai.ibs.lime.dycSchedul;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;
 
/**
 * Spring動態周期定時任務 在不停應用的情況下更改任務執行周期
 *
 * @author Liang
 *
 *         2017年6月1日
 */
@Lazy(false)
@Component
@EnableScheduling
public class SpringDynamicCornTask implements SchedulingConfigurer {
    private static final Logger logger = LoggerFactory.getLogger(SpringDynamicCornTask.class);
    private static String cron;
    private SpringDynamicCornTask() {
        cron = "0/5 * * * * ?";
        // 開啟新線程模擬外部更改了任務執行周期
        new Thread(new Runnable() {
 
            @Override
            public void run() {
                try {
                    Thread.sleep(15 * 1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                cron = "0/10 * * * * ?";
                System.out.println("cron change to : " + cron);
            }
        }).start();
    }
 
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.addTriggerTask(new Runnable() {
 
            @Override
            public void run() {
                // 任務邏輯
                logger.info("dynamicCronTask is running...");
            }
        }, new Trigger() {
 
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                // 任務觸發,可修改任務的執行周期
                CronTrigger trigger = new CronTrigger(cron);
                Date nextExecutionTime = trigger.nextExecutionTime(triggerContext);
                return nextExecutionTime;
            }
        });
    }
}

Console :

[INFO 2017-06-01 12:26:25 SpringDynamicCornTask] - dynamicCronTask is running...
[INFO 2017-06-01 12:26:30 SpringDynamicCornTask] - dynamicCronTask is running...
[INFO 2017-06-01 12:26:35 SpringDynamicCornTask] - dynamicCronTask is running...
cron change to : 0/10 * * * * ?
[INFO 2017-06-01 12:26:40 SpringDynamicCornTask] - dynamicCronTask is running...
[INFO 2017-06-01 12:26:50 SpringDynamicCornTask] - dynamicCronTask is running...
[INFO 2017-06-01 12:27:00 SpringDynamicCornTask] - dynamicCronTask is running...

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/JJ_LIJIN/article/details/78644985

延伸 · 閱讀

精彩推薦
  • Java教程模擬Spring的簡單實現

    模擬Spring的簡單實現

    本文的主要內容就是學習Spring的開端,模擬一下Spring的實現,感興趣的小伙伴可以參考一下 ...

    IT_xiao小巫5322020-01-09
  • Java教程淺談cookie和session(小結)

    淺談cookie和session(小結)

    這篇文章主要介紹了淺談cookie和session(小結),cookie和session在java web開發中扮演了十分重要的作用,本篇文章對其中的重要知識點做一些探究和總結...

    xdx6452021-06-14
  • Java教程SpringBoot如何實現接口版本控制

    SpringBoot如何實現接口版本控制

    這篇文章主要介紹了SpringBoot如何實現接口版本控制,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教...

    Zacxxx11612022-02-17
  • Java教程詳解java定時任務

    詳解java定時任務

    這篇文章主要為大家詳細介紹了java定時任務,使用JDK中的Timer定時任務來實現,感興趣的小伙伴們可以參考一下 ...

    chenssy3392020-04-09
  • Java教程后端必會的 Spring MVC 核心類和注解

    后端必會的 Spring MVC 核心類和注解

    DispatcherServlet的全名是org.springframework.web.servlet.DispatcherServlet,它在程序中充當著前端控制器的角色。在使用時,只需將其配置在項目的web.xml文件中。...

    程序員千羽6292021-11-01
  • Java教程Java實現二叉樹的深度優先遍歷和廣度優先遍歷算法示例

    Java實現二叉樹的深度優先遍歷和廣度優先遍歷算法示例

    這篇文章主要介紹了Java實現二叉樹的深度優先遍歷和廣度優先遍歷算法,結合實例形式詳細分析了二叉樹的定義、深度優先遍歷與廣度優先遍歷算法原理與...

    Fantasy_Lin_11742021-04-22
  • Java教程使用Spring Data Redis實現數據緩存的方法

    使用Spring Data Redis實現數據緩存的方法

    目前在系統架構設計中使用Redis實現緩存,這篇文章主要介紹了使用Spring Data Redis實現數據緩存的方法,具有一定的參考價值,需要的朋友可以參考下 ...

    JavaQ10742021-06-09
  • Java教程Java中的對象和對象引用實例淺析

    Java中的對象和對象引用實例淺析

    這篇文章主要介紹了Java中的對象和對象引用,實例分析了對象與對象引用的概念與相關使用技巧,需要的朋友可以參考下 ...

    海 子3512019-12-19
主站蜘蛛池模板: 婷婷精品 | 我的妹妹最近有点怪在线观看 | 成人在线免费观看 | 黄a在线观看| 欧美精品v欧洲高清 | 国产自在自拍 | 初尝黑人巨大h文 | 国产精品资源在线观看 | caoporn超碰最新地址进入 | 草草视频免费观看 | 精品国产线拍大陆久久尤物 | 国产激情一区二区三区四区 | 蘑菇香蕉茄子绿巨人丝瓜草莓 | 天天曰天天干 | 精品高潮呻吟99AV无码 | 国产成人愉拍免费视频 | 欧美乱码视频 | meyd–456佐山爱在线播放 | avove全部视频在线观看 | 久久亚洲精品专区蓝色区 | 国产剧情麻豆刘玥视频 | 亚洲免费在线看 | 日本卡1卡2卡4卡免费 | 热九九精品 | www.日本视频 | 美女操穴视频 | a级亚洲片精品久久久久久久 | 男公厕里同性做爰 | 久久国产精品人妻中文 | 国产亚洲一区二区三区 | 国产不卡视频一区二区在线观看 | 女人全身裸露无遮挡免费观看 | 日本免费高清在线 | 成人小视频在线观看 | 色成人综合网 | 娇妻被朋友征服中文字幕 | 草草剧场| 色中色官网 | 免费国产白棉袜踩踏区域 | 国产美女操 | 韩国三级 720p |