亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

1. 概論

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

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

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

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

@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ù)");
    }
}

如果需要修改的話(huà),我們可以將 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í)候,再通過(guò)修改配置文件中的內(nèi)容來(lái)進(jìn)行控制。具體怎么動(dòng)態(tài)的修改配置文件中的內(nèi)容,后面我會(huì)專(zhuān)門(mén)寫(xiě)一篇文章來(lái)說(shuō)明。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@Configuration
public class ScheduledConfig {

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

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

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

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

相關(guān)文章

  • XML解析四種方式代碼示例詳解

    XML解析四種方式代碼示例詳解

    這篇文章主要介紹了XML解析四種方式代碼示例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Spring Cloud 系列之服務(wù)調(diào)用 OpenFeign的實(shí)現(xiàn)

    Spring Cloud 系列之服務(wù)調(diào)用 OpenFeign的實(shí)現(xiàn)

    這篇文章主要介紹了Spring Cloud 系列之服務(wù)調(diào)用 OpenFeign的實(shí)現(xiàn),需要的朋友可以參考下
    2020-11-11
  • 關(guān)于MyBatis的foreach標(biāo)簽常用方法

    關(guān)于MyBatis的foreach標(biāo)簽常用方法

    這篇文章主要介紹了關(guān)于MyBatis的foreach標(biāo)簽常用方法,foreach 標(biāo)簽可以用來(lái)遍歷數(shù)組、列表和 Map 等集合參數(shù),實(shí)現(xiàn)批量操作或一些簡(jiǎn)單 SQL 操作,需要的朋友可以參考下
    2023-05-05
  • 淺談Java?abstract關(guān)鍵字不能和哪些關(guān)鍵字共存

    淺談Java?abstract關(guān)鍵字不能和哪些關(guān)鍵字共存

    本文主要介紹了Java?abstract關(guān)鍵字不能和哪些關(guān)鍵字共存,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-10-10
  • Intellij idea使用Statistic統(tǒng)計(jì)代碼行數(shù)的方法

    Intellij idea使用Statistic統(tǒng)計(jì)代碼行數(shù)的方法

    這篇文章主要介紹了Intellij idea使用Statistic統(tǒng)計(jì)代碼行數(shù)的方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Java Validation Api實(shí)現(xiàn)原理解析

    Java Validation Api實(shí)現(xiàn)原理解析

    這篇文章主要介紹了Java Validation Api實(shí)現(xiàn)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • java-RGB調(diào)色面板的實(shí)現(xiàn)(事件監(jiān)聽(tīng)器之匿名內(nèi)部類(lèi))

    java-RGB調(diào)色面板的實(shí)現(xiàn)(事件監(jiān)聽(tīng)器之匿名內(nèi)部類(lèi))

    這篇文章主要介紹了java-RGB調(diào)色面板的實(shí)現(xiàn)(事件監(jiān)聽(tīng)器之匿名內(nèi)部類(lèi)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Java EasyExcel實(shí)現(xiàn)導(dǎo)出多sheet并設(shè)置單元格樣式

    Java EasyExcel實(shí)現(xiàn)導(dǎo)出多sheet并設(shè)置單元格樣式

    EasyExcel是一個(gè)基于Java的、快速、簡(jiǎn)潔、解決大文件內(nèi)存溢出的Excel處理工具,下面我們就來(lái)學(xué)習(xí)一下EasyExcel如何實(shí)現(xiàn)導(dǎo)出多sheet并設(shè)置單元格樣式吧
    2023-11-11
  • Jmeter常見(jiàn)函數(shù)使用方法匯總

    Jmeter常見(jiàn)函數(shù)使用方法匯總

    這篇文章主要介紹了Jmeter函數(shù)使用方法匯總,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java中for循環(huán)遍歷刪除操作方法

    Java中for循環(huán)遍歷刪除操作方法

    在Java中,有些場(chǎng)景需要遍歷集合中的元素,然后根據(jù)條件進(jìn)行刪除元素的操作,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11

最新評(píng)論