欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring6.x對(duì)調(diào)度和異步執(zhí)行的注解支持示例詳解

 更新時(shí)間:2023年11月24日 09:15:30   作者:JavaEdge  
這篇文章主要為大家介紹了Spring6.x對(duì)調(diào)度和異步執(zhí)行的注解支持示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

1 啟用Scheduling注解

Spring為任務(wù)調(diào)度和異步方法執(zhí)行提供注解支持。

要啟用 @Scheduled 和 @Async ,在 @Configuration 類(或者在啟動(dòng)類)添加 @EnableScheduling 和 @EnableAsync,如下:

@Configuration
@EnableAsync
@EnableScheduling
public class AppConfig {

}
@SpringBootApplication(exclude = {
        DataSourceAutoConfiguration.class,
})
@EnableScheduling
public class RoadSyncApplication {

    public static void main(String[] args) {
        SpringApplication.run(RoadSyncApplication.class, args);
    }
}

你可以為你的應(yīng)用程序選擇相關(guān)的注解。例如,如果你只需要支持 @Scheduled,可以省略 @EnableAsync。對(duì)于更細(xì)粒度的控制,你還可以分別實(shí)現(xiàn) SchedulingConfigurer 接口和 AsyncConfigurer 接口。有關(guān)完整詳細(xì)信息,請(qǐng)參閱 SchedulingConfigurer 和 AsyncConfigurer javadoc。

默認(rèn)處理 @Async 注解的建議模式是 proxy,它僅允許通過(guò)代理攔截調(diào)用。使用這種方式無(wú)法攔截同一類中的本地調(diào)用。 對(duì)于更高級(jí)的攔截模式,請(qǐng)考慮切換到 aspectj 模式與編譯時(shí)織入或加載時(shí)織入結(jié)合使用。

2 @Scheduled 注解

可將 @Scheduled 注解以及觸發(fā)元數(shù)據(jù)添加到方法中。

2.1 fixedDelay

如下方法每5000ms執(zhí)行一次,采用固定延遲,即周期從每次先前調(diào)用的【完成時(shí)間】開(kāi)始測(cè)量。

@Scheduled(fixedDelay = 5000)  
public void doSomething() {
    // 定期運(yùn)行的內(nèi)容  
}

默認(rèn),固定延遲、固定速率和初始延遲的值將使用ms作時(shí)間單位。如想用不同時(shí)間單位,如s或min,可在 @Scheduled 配置 timeUnit 屬性:

@Scheduled(fixedDelay = 5, timeUnit = TimeUnit.SECONDS)
public void doSomething() {
}

2.2 fixedRate

如需固定速率執(zhí)行,使用 fixedRate 屬性。下面的方法每五秒(從每次【調(diào)用的開(kāi)始時(shí)間】間隔測(cè)量)執(zhí)行一次:

@Scheduled(fixedRate = 5, timeUnit = TimeUnit.SECONDS)  
public void doSomething() {

}

固定延遲、固定速率的任務(wù),可通過(guò)指示等待的時(shí)間量來(lái)指定初始延遲,然后再執(zhí)行方法的第一次調(diào)用:

@Scheduled(initialDelay=1000, fixedRate=5000)  
public void doSomething() {
    // 定期運(yùn)行的內(nèi)容
}

2.3 一次性任務(wù)

可只指定通過(guò)指示等待執(zhí)行方法的時(shí)間量的初始延遲:

@Scheduled(initialDelay=1000)
public void doSomething() {
    // 只運(yùn)行一次
}

若簡(jiǎn)單的定期計(jì)劃不夠表達(dá)力,可用 cron 表達(dá)式:

@Scheduled(cron="*/5 * * * * MON-FRI")  
public void doSomething() {
    // 僅在工作日運(yùn)行的內(nèi)容 
}

還可使用 zone 屬性指定解析 cron 表達(dá)式的時(shí)區(qū)。

要計(jì)劃的方法須有 void 返回值,且不接受任何參數(shù)。如果方法需要與應(yīng)用程序上下文中的其他對(duì)象交互,那么這些對(duì)象通常已經(jīng)通過(guò)依賴注入。

@Scheduled 是可重復(fù)注解。如在同一方法上找到幾個(gè) scheduled 聲明,每個(gè)聲明都將獨(dú)立處理,為每個(gè)聲明觸發(fā)單獨(dú)的觸發(fā)器。因此,這樣的共定位計(jì)劃可并行重疊并立即連續(xù)執(zhí)行多次。請(qǐng)確保你指定的 cron 表達(dá)式等不會(huì)意外重疊。

Spring Framework 4.3 開(kāi)始,支持任何范圍的 bean 上的 @Scheduled 方法。確保在運(yùn)行時(shí)不初始化同一 @Scheduled 注解類的多個(gè)實(shí)例,除非你確實(shí)希望調(diào)度回調(diào)到每個(gè)這樣的實(shí)例。

確保不要在使用 @Scheduled 注解并作為常規(guī) Spring bean 注冊(cè)到容器中的 bean 類上使用 @Configurable。否則,你將獲得雙重初始化(一次通過(guò)容器,一次通過(guò) @Configurable 方面),其結(jié)果是每個(gè) @Scheduled 方法被調(diào)用兩次。

FAQ

問(wèn)題

生產(chǎn)用@Scheduled注解寫(xiě)定時(shí)任務(wù),5min執(zhí)行一次:

@Scheduled(cron = "0 0/5 * * * ?")
public void MyTimerJobSchedule() throws Exception {
  //省略具體業(yè)務(wù)邏輯
  System.out.println("五分鐘執(zhí)行一次");
}

過(guò)幾天,領(lǐng)導(dǎo)通知說(shuō)有問(wèn)題,一查日志,發(fā)現(xiàn)是定時(shí)任務(wù)問(wèn)題。本來(lái)應(yīng)該是5min跑一次,結(jié)果日志發(fā)現(xiàn),每天0點(diǎn)-3點(diǎn)正常,3-10點(diǎn)沒(méi)執(zhí)行;一直到10-11點(diǎn)之間才繼續(xù)跑。

原因

發(fā)現(xiàn)可能是定時(shí)任務(wù)單線程模式導(dǎo)致任務(wù)阻塞。

繼續(xù)分析日志,發(fā)現(xiàn)該定時(shí)任務(wù)的線程號(hào)是[Scheduling-1],除了執(zhí)行自身的任務(wù),還打印了其它定時(shí)任務(wù)的輸出語(yǔ)句。

每天3點(diǎn)前,[Scheduling-1]線程在執(zhí)行本人寫(xiě)的5min一次的定時(shí)任務(wù),3點(diǎn)后,[Scheduling-1]線程會(huì)執(zhí)行另一個(gè)比較耗時(shí)的定時(shí)任務(wù),直到10點(diǎn)后,[Scheduling-1]線程才重新執(zhí)行5min一次的定時(shí)任務(wù)。

看來(lái),確實(shí)是由于@Scheduled定時(shí)任務(wù)默認(rèn)使用單線程模式導(dǎo)致:一旦有一個(gè)定時(shí)任務(wù)比較耗時(shí),就會(huì)影響到其它定時(shí)任務(wù)按時(shí)執(zhí)行。

解決方法

在定時(shí)任務(wù)加@Async注解,并在啟動(dòng)類增加@EnableAsync注解,使用多線程模式執(zhí)行定時(shí)任務(wù)。

參考網(wǎng)址 http://www.dbjr.com.cn/program/3058076vb.htm

參考網(wǎng)址中有第二種解決方法,但是已說(shuō)明不太好用,因此只用第一種解決方法就夠了。

以上就是Spring6.x對(duì)調(diào)度和異步執(zhí)行的注解支持示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Spring6.x調(diào)度異步執(zhí)行注解的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解析ConcurrentHashMap: 紅黑樹(shù)的代理類(TreeBin)

    解析ConcurrentHashMap: 紅黑樹(shù)的代理類(TreeBin)

    ConcurrentHashMap是由Segment數(shù)組結(jié)構(gòu)和HashEntry數(shù)組結(jié)構(gòu)組成。Segment的結(jié)構(gòu)和HashMap類似,是一種數(shù)組和鏈表結(jié)構(gòu),今天給大家普及java面試常見(jiàn)問(wèn)題---ConcurrentHashMap知識(shí),一起看看吧
    2021-06-06
  • Mybatis中mapper.xml實(shí)現(xiàn)熱加載介紹

    Mybatis中mapper.xml實(shí)現(xiàn)熱加載介紹

    大家好,本篇文章主要講的是Mybatis中mapper.xml實(shí)現(xiàn)熱加載介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • Mybatis返回Map數(shù)據(jù)方式示例

    Mybatis返回Map數(shù)據(jù)方式示例

    這篇文章主要為大家介紹了Mybatis返回Map數(shù)據(jù)方式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Java object類及正則表達(dá)式原理解析

    Java object類及正則表達(dá)式原理解析

    這篇文章主要介紹了Java object類及正則表達(dá)式原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Mybatis Trim標(biāo)簽用法簡(jiǎn)單介紹

    Mybatis Trim標(biāo)簽用法簡(jiǎn)單介紹

    這篇文章主要介紹了Mybatis Trim標(biāo)簽用法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-05-05
  • 詳解lambda表達(dá)式foreach性能分析

    詳解lambda表達(dá)式foreach性能分析

    這篇文章主要介紹了詳解lambda表達(dá)式foreach性能分析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 詳解Java設(shè)計(jì)模式之橋接模式

    詳解Java設(shè)計(jì)模式之橋接模式

    橋接,顧名思義,就是用來(lái)連接兩個(gè)部分,使得兩個(gè)部分可以互相通訊。橋接模式將系統(tǒng)的抽象部分與實(shí)現(xiàn)部分分離解耦,使他們可以獨(dú)立的變化。本文通過(guò)示例詳細(xì)介紹了橋接模式的原理與使用,需要的可以參考一下
    2022-10-10
  • Java超詳細(xì)講解抽象類的原理與用法

    Java超詳細(xì)講解抽象類的原理與用法

    對(duì)于面向?qū)ο缶幊虂?lái)說(shuō),抽象是它的一大特征之一,在Java中可以通過(guò)兩種形式來(lái)體現(xiàn)OOP的抽象:接口和抽象類,下面這篇文章主要給大家介紹了關(guān)于Java抽象類相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • windows 32位eclipse遠(yuǎn)程hadoop開(kāi)發(fā)環(huán)境搭建

    windows 32位eclipse遠(yuǎn)程hadoop開(kāi)發(fā)環(huán)境搭建

    這篇文章主要介紹了windows 32位eclipse遠(yuǎn)程hadoop開(kāi)發(fā)環(huán)境搭建的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • 如何配置Spring Boot中的Jackson序列化

    如何配置Spring Boot中的Jackson序列化

    在開(kāi)發(fā)基于Spring Boot的應(yīng)用程序時(shí),Jackson是默認(rèn)的JSON序列化和反序列化工具,本文將詳細(xì)介紹如何在Spring Boot中配置Jackson,以滿足這些需求,感興趣的朋友一起看看吧
    2025-04-04

最新評(píng)論