最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot中實(shí)現(xiàn)@Scheduled動態(tài)定時(shí)任務(wù)

 更新時(shí)間:2024年01月29日 09:34:15   作者:roseduan  
SpringBoot中的@Scheduled注解為定時(shí)任務(wù)提供了一種很簡單的實(shí)現(xiàn),本文主要介紹了SpringBoot中實(shí)現(xiàn)@Scheduled動態(tài)定時(shí)任務(wù),具有一定的參考價(jià)值,感興趣的可以了解一下

1. 概論

Spring Boot 中的 @Scheduled 注解為定時(shí)任務(wù)提供了一種很簡單的實(shí)現(xiàn),只需要在注解中加上一些屬性,例如 fixedRate、fixedDelay、cron(最常用)等等,并且在啟動類上面加上 @EnableScheduling 注解,就可以啟動一個(gè)定時(shí)任務(wù)了。

但是在某些情況下,并沒有這么簡單,例如項(xiàng)目部署上線之后,我們可能會修改定時(shí)任務(wù)的執(zhí)行時(shí)間,并且停止、重啟定時(shí)任務(wù)等,因?yàn)槎〞r(shí)任務(wù)是直接寫死在程序中的,修改起來不是非常的方便。所以,簡單記錄一下自己的一些解決方案,僅供參考。

2. 在配置文件中設(shè)置參數(shù)

以 cron 表達(dá)式為例,一般的做法是將 @Scheduled 的屬性寫在程序中的,例如這樣:

@Component
public class TestTask {
    private static SimpleDateFormat dateFmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    @Scheduled(cron = "0/5 * * * * ?")
    public void test(){
        System.out.println(dateFmt.format(new Date()) + " : 執(zhí)行定時(shí)任務(wù)");
    }
}

如果需要修改的話,我們可以將 cron 表達(dá)式配在 application.yml 中:

#application.yml中的配置
scheduled:
  cron: 0/5 * * * * ?

然后在 @Scheduled 中獲取這個(gè)配置:

@Scheduled(cron = "${scheduled.cron}")
public void test(){
    System.out.println(dateFmt.format(new Date()) + " : 執(zhí)行定時(shí)任務(wù)");
}

等到了線上的時(shí)候,再通過修改配置文件中的內(nèi)容來進(jìn)行控制。具體怎么動態(tài)的修改配置文件中的內(nèi)容,后面我會專門寫一篇文章來說明。

3. 如何關(guān)閉定時(shí)任務(wù)

一種方式是根據(jù)實(shí)際的需求,設(shè)置一個(gè)很久之后的時(shí)間再執(zhí)行,例如明年的某個(gè)時(shí)間點(diǎn),你可能會想何不設(shè)置一個(gè)已經(jīng)過去的時(shí)間(例如 2012 年),但是很遺憾,@Scheduled 并不支持設(shè)置年份。

另外 Spring Boot 2.1 以上的版本還提供了一種停止定時(shí)任務(wù)的方案,就是在 cron 中配置 “-” 即可,你也可以在配置文件中設(shè)置這個(gè)符號:

#application.yml中的配置
scheduled:
  cron: "-"

注意這里必須加上一個(gè)雙引號,因?yàn)樵?application.yml 中, - 是一個(gè)特殊的字符。

4. 為定時(shí)任務(wù)設(shè)置開關(guān)

如果嫌上面這種方式比較死板,可以嘗試另一種,給定時(shí)任務(wù)加上開關(guān)的方案,在配置文件中配置一個(gè) boolean 屬性,如果是 true 的話,就開啟定時(shí)任務(wù),否則不開啟。

#application.yml中的配置
scheduled:
  cron: 0/5 * * * * ?
enable:
  scheduled: true

然后我們可以使前面說到的 @Conditional 注解來實(shí)現(xiàn)這個(gè)功能,如果你還不了解,可以看我這篇文章:淺談 Spring Boot 中的 @Conditional 注解

其實(shí) @Scheduled 注解,是被一個(gè)叫做 ScheduledAnnotationBeanPostProcessor 的類所攔截的,所以我們可以根據(jù)配置,決定是否創(chuàng)建這個(gè) bean,如果沒有這個(gè) bean,@Scheduled 就不會被攔截,那么定時(shí)任務(wù)肯定不會執(zhí)行了,有了這個(gè)思路,實(shí)現(xiàn)起來就很簡單了。需要注意的是:這種方式,啟動類上面的 @EnableScheduling 需要去掉。

然后創(chuàng)建一個(gè) ScheduledCondtion 類,內(nèi)容如下:

public class ScheduledCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        //讀取配置中的屬性
        return Boolean.valueOf(context.getEnvironment().getProperty("enable.scheduled"));
    }
}

這個(gè)類的功能很簡單,就是去讀取配置,然后返回一個(gè) boolean 值。

然后創(chuàng)建一個(gè)配置類 ScheduledConfig ,內(nèi)容如下:

@Configuration
public class ScheduledConfig {

    @Conditional(ScheduledCondition.class)
    @Bean
    public ScheduledAnnotationBeanPostProcessor processor() {
        return new ScheduledAnnotationBeanPostProcessor();
    }
}

這個(gè)配置,就是以 ScheduledCondtion 為條件,決定是否創(chuàng)建 bean。然后,啟動項(xiàng)目,定時(shí)任務(wù)就會執(zhí)行,如果我們將配置修改為 false,則不會執(zhí)行。

這樣的話,我們就能夠很容易的啟動或者關(guān)閉定時(shí)任務(wù)了,并且也可以實(shí)時(shí)修改 cron 表達(dá)式的值。

到此這篇關(guān)于SpringBoot中實(shí)現(xiàn)@Scheduled動態(tài)定時(shí)任務(wù)的文章就介紹到這了,更多相關(guān)SpringBoot @Scheduled動態(tài)定時(shí)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java8 實(shí)現(xiàn)提取集合對象的每個(gè)屬性

    java8 實(shí)現(xiàn)提取集合對象的每個(gè)屬性

    這篇文章主要介紹了java8 實(shí)現(xiàn)提取集合對象的每個(gè)屬性方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • java中的反射及其優(yōu)點(diǎn)說明

    java中的反射及其優(yōu)點(diǎn)說明

    這篇文章主要介紹了java中的反射及其優(yōu)點(diǎn)說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 簡單了解java中int和Integer的區(qū)別

    簡單了解java中int和Integer的區(qū)別

    這篇文章主要介紹了簡單了解java中int和Integer的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • JavaWeb文件上傳下載實(shí)例講解(酷炫的文件上傳技術(shù))

    JavaWeb文件上傳下載實(shí)例講解(酷炫的文件上傳技術(shù))

    在Web應(yīng)用系統(tǒng)開發(fā)中,文件上傳功能是非常常用的功能,今天來主要講講JavaWeb中的文件上傳功能的相關(guān)技術(shù)實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-11-11
  • Java 程序里transient關(guān)鍵字使用方法示例

    Java 程序里transient關(guān)鍵字使用方法示例

    這篇文章主要為大家介紹了Java 程序里transient關(guān)鍵字使用方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Java中String類常用的各種方法(示例詳解)

    Java中String類常用的各種方法(示例詳解)

    本文介紹了Java中String類的常用方法,本文通過示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • 關(guān)于Java中的 JSP 詳解

    關(guān)于Java中的 JSP 詳解

    JSP 代表 Java 服務(wù)器頁面。它是一種在應(yīng)用服務(wù)器端使用的編程工具。JSP 基本上用于支持平臺–獨(dú)立和動態(tài)的方法來構(gòu)建 Web 依賴的應(yīng)用程序。JSP 頁面類似于 ASP 頁面,因?yàn)樗鼈兪窃诜?wù)器上編譯的,而不是在用戶的 Web 瀏覽器上進(jìn)行編譯。下面來看看文章的詳細(xì)介紹內(nèi)容
    2021-11-11
  • Java判斷IP地址為內(nèi)網(wǎng)IP還是公網(wǎng)IP的方法

    Java判斷IP地址為內(nèi)網(wǎng)IP還是公網(wǎng)IP的方法

    這篇文章主要介紹了Java判斷IP地址為內(nèi)網(wǎng)IP還是公網(wǎng)IP的方法,針對tcp/ip協(xié)議中保留的三個(gè)私有地址進(jìn)行判斷分析,是比較實(shí)用的技巧,需要的朋友可以參考下
    2015-01-01
  • Java不能真正泛型的原因是什么?

    Java不能真正泛型的原因是什么?

    今天我來給大家講一下,Java 不能實(shí)現(xiàn)真正泛型的原因是什么?感興趣的朋友可以看一下,如果能給你到來一些幫助,請關(guān)注小編的其他內(nèi)容
    2021-08-08
  • Java中的復(fù)合數(shù)據(jù)類型

    Java中的復(fù)合數(shù)據(jù)類型

    這篇文章主要介紹了Java中的復(fù)合數(shù)據(jù)類型,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評論

英德市| 五原县| 芜湖县| 盖州市| 大悟县| 汉寿县| 武隆县| 广河县| 新疆| 桦甸市| 吉林市| 长丰县| 濮阳县| 莲花县| 苍南县| 彭泽县| 长治市| 屏边| 威信县| 长海县| 高阳县| 永川市| 华容县| 桐庐县| 满城县| 大方县| 荔浦县| 徐州市| 乌苏市| 北流市| 灵石县| 仁寿县| 凤冈县| 浙江省| 安西县| 松阳县| 绥江县| 湖州市| 武冈市| 贵南县| 和平县|