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

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

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

1 啟用Scheduling注解

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

要啟用 @Scheduled 和 @Async ,在 @Configuration 類(或者在啟動類)添加 @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。對于更細(xì)粒度的控制,你還可以分別實現(xiàn) SchedulingConfigurer 接口和 AsyncConfigurer 接口。有關(guān)完整詳細(xì)信息,請參閱 SchedulingConfigurer 和 AsyncConfigurer javadoc。

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

2 @Scheduled 注解

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

2.1 fixedDelay

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

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

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

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

2.2 fixedRate

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

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

}

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

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

2.3 一次性任務(wù)

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

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

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

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

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

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

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

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

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

FAQ

問題

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

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

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

原因

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

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

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

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

解決方法

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

參考網(wǎng)址 http://www.fzitv.net/program/3058076vb.htm

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

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

相關(guān)文章

  • 詳解Java中Dijkstra(迪杰斯特拉)算法的圖解與實現(xiàn)

    詳解Java中Dijkstra(迪杰斯特拉)算法的圖解與實現(xiàn)

    Dijkstra(迪杰斯特拉)算法是典型的單源最短路徑算法,用于計算一個節(jié)點到其他所有節(jié)點的最短路徑。本文將詳解該算法的圖解與實現(xiàn),需要的可以參考一下
    2022-05-05
  • MyBatis的通俗理解:SqlSession.getMapper()源碼解讀

    MyBatis的通俗理解:SqlSession.getMapper()源碼解讀

    這篇文章主要介紹了MyBatis的通俗理解:SqlSession.getMapper()源碼解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 基于IDEA2018卡死不動的解決方式(好用)

    基于IDEA2018卡死不動的解決方式(好用)

    這篇文章主要介紹了基于IDEA2018卡死不動的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 一起來學(xué)習(xí)Java的棧和隊列

    一起來學(xué)習(xí)Java的棧和隊列

    這篇文章主要為大家詳細(xì)介紹了Java的棧和隊列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • SpringBoot自動初始化數(shù)據(jù)庫的方法分享

    SpringBoot自動初始化數(shù)據(jù)庫的方法分享

    我們在項目中應(yīng)該經(jīng)常遇到過初始化數(shù)據(jù)的場景,特別是項目部署或者交付的時候,那么有什么方式可以在項目啟動的時候自動初始化數(shù)據(jù)庫呢,下面小編就來和大家分享幾個方法吧
    2023-08-08
  • java上乘武功入門--反射

    java上乘武功入門--反射

    反射是Java的一種機(jī)制,一般也叫做反射機(jī)制,本文會講反射機(jī)制是什么和怎么使用,喜歡的朋友可以觀看一下,希望能給你帶來幫助
    2021-07-07
  • MyBatis中的多字段IN查詢方式

    MyBatis中的多字段IN查詢方式

    本文介紹了在MyBatis中進(jìn)行多字段IN查詢的目標(biāo)SQL、Mapper接口定義及XML配置方法,并簡要總結(jié)了相關(guān)個人經(jīng)驗,供讀者參考和學(xué)習(xí)
    2025-10-10
  • 分布式調(diào)度器之Spring Task 的使用詳解

    分布式調(diào)度器之Spring Task 的使用詳解

    SpringTask是Spring框架中用于任務(wù)調(diào)度的組件,通過簡單的注解就能實現(xiàn)定時任務(wù)的創(chuàng)建和調(diào)度,可以通過配置線程池來實現(xiàn),本文給大家介紹分布式調(diào)度器之Spring Task 的使用,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • SpringCloud OpenFeign超詳細(xì)講解模板化遠(yuǎn)程通信的實現(xiàn)

    SpringCloud OpenFeign超詳細(xì)講解模板化遠(yuǎn)程通信的實現(xiàn)

    這篇文章主要介紹了SpringCloudSpringboot集成OpenFeign實現(xiàn)模板化遠(yuǎn)程通信,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2022-07-07
  • Java從入門到起飛之變量與運(yùn)算符詳解

    Java從入門到起飛之變量與運(yùn)算符詳解

    這篇文章主要介紹了Java編程語言中的關(guān)鍵字、標(biāo)識符、變量、基本數(shù)據(jù)類型以及運(yùn)算符等基本概念和用法,它涵蓋了變量聲明、賦值、類型轉(zhuǎn)換、字符串操作以及運(yùn)算符優(yōu)先級等內(nèi)容,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03

最新評論

明水县| 东明县| 昂仁县| 赣榆县| 榆社县| 双流县| 淳安县| 同仁县| 大悟县| 米易县| 宁河县| 双辽市| 盐亭县| 涪陵区| 宜章县| 英山县| 息烽县| 祥云县| 辛集市| 蒲城县| 冀州市| 专栏| 北川| 延吉市| 台山市| 文水县| 天水市| 河间市| 长武县| 崇义县| 济源市| 垣曲县| 梅州市| 通化市| 余庆县| 漳浦县| 都安| 马公市| 玉龙| 漯河市| 阿拉善右旗|