国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

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

這篇具有很好參考價(jià)值的文章主要介紹了Spring6.x對(duì)調(diào)度和異步執(zhí)行的注解支持。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

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

1 啟用Scheduling注解

要啟用 @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)參閱 SchedulingConfigurerAsyncConfigurer 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)址:https://blog.csdn.net/LYM0721/article/details/89499588

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

本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-747189.html

到了這里,關(guān)于Spring6.x對(duì)調(diào)度和異步執(zhí)行的注解支持的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 造個(gè)輪子-任務(wù)調(diào)度執(zhí)行小框架-任務(wù)清單執(zhí)行器實(shí)現(xiàn)

    造個(gè)輪子-任務(wù)調(diào)度執(zhí)行小框架-任務(wù)清單執(zhí)行器實(shí)現(xiàn)

    okey,上一篇文章我們提到了,如何實(shí)現(xiàn)它的一個(gè)清單的一個(gè)代理。這里的話我們來(lái)捋一捋我們的這個(gè)執(zhí)行流程是啥: 所以的話,我們的我們這里今天要做的是這個(gè)執(zhí)行器的一個(gè)執(zhí)行。當(dāng)然這里的話,我們也是分兩個(gè)部分,因?yàn)檫@個(gè)執(zhí)行器的話,是分兩個(gè)部分的,一個(gè)是正常的

    2024年02月13日
    瀏覽(24)
  • 【面試問(wèn)題】事務(wù)中執(zhí)行了異步任務(wù)分發(fā)數(shù)據(jù),由于事務(wù)未提交,導(dǎo)致異步任務(wù)無(wú)法執(zhí)行

    客戶數(shù)據(jù)分發(fā)CRMS系統(tǒng)的時(shí)候異常,分發(fā)任務(wù)強(qiáng)依賴于事務(wù)內(nèi)有沒(méi)有提交,異常由事務(wù)未及時(shí)提交導(dǎo)致異步任務(wù)無(wú)法及時(shí)查到數(shù)據(jù),現(xiàn)將異步任務(wù)調(diào)整為事務(wù)提交后處理 添加事務(wù)同步管理器,聲明異步是在事務(wù)提交后執(zhí)行

    2024年02月13日
    瀏覽(21)
  • 造個(gè)輪子-任務(wù)調(diào)度執(zhí)行小框架-任務(wù)清單解析實(shí)現(xiàn)

    造個(gè)輪子-任務(wù)調(diào)度執(zhí)行小框架-任務(wù)清單解析實(shí)現(xiàn)

    okey~每日編碼一坤時(shí),昨天的話我們已經(jīng)實(shí)現(xiàn)了這個(gè)框架的IOC容器。通過(guò)這個(gè)IOC容器,我們就可以非常輕松地進(jìn)行后續(xù)的操作,于是,我們接著這個(gè)工作,去完成這個(gè)任務(wù)清單的解析。 昨天的話,闡述了一下這個(gè)框架解決了哪些問(wèn)題,那么接下來(lái),是如何使用這個(gè)家伙。以及

    2024年02月13日
    瀏覽(22)
  • SpringBoot異步方法支持注解@Async應(yīng)用

    SpringBoot異步方法支持注解@Async應(yīng)用

    合理使用異步方法可以有效的提高執(zhí)行效率 同步執(zhí)行(同在一個(gè)線程中): 異步執(zhí)行(開(kāi)啟額外線程來(lái)執(zhí)行): 在SpringBoot中并不需要我們自己去創(chuàng)建維護(hù)線程或者線程池來(lái)異步的執(zhí)行方法, SpringBoot已經(jīng)提供了異步方法支持注解. service層: controller層: 測(cè)試結(jié)果: 我們可以感受到接口

    2024年02月11日
    瀏覽(22)
  • C++語(yǔ)言Qt實(shí)現(xiàn) 實(shí)時(shí)任務(wù)調(diào)度仿真軟件 任務(wù)參數(shù)可配置和隨機(jī)生成支持多核調(diào)度

    C++語(yǔ)言Qt實(shí)現(xiàn) 實(shí)時(shí)任務(wù)調(diào)度仿真軟件 任務(wù)參數(shù)可配置和隨機(jī)生成支持多核調(diào)度

    我遇到個(gè)需求: 目標(biāo): 開(kāi)發(fā)一個(gè)實(shí)時(shí)任務(wù)調(diào)度仿真軟件,我們?cè)趯W(xué)習(xí)操作系統(tǒng)這門(mén)課時(shí)候,經(jīng)常需要觀察任務(wù)動(dòng)態(tài)調(diào)度情況,來(lái)更好的直觀學(xué)習(xí)操作系統(tǒng)任務(wù)調(diào)度過(guò)程和調(diào)度算法。 內(nèi)部原理: 操作系統(tǒng)任務(wù)調(diào)度實(shí)際上是一個(gè)有限狀態(tài)機(jī),任務(wù)的各種狀態(tài)不斷的轉(zhuǎn)換過(guò)程,我

    2023年04月25日
    瀏覽(29)
  • js中如何順序執(zhí)行異步任務(wù)

    在js中,任務(wù)可分為兩種,同步任務(wù)和異步任務(wù)。 (1) 同步任務(wù) 又叫 非耗時(shí)任務(wù) ,指的是在主線程排隊(duì)執(zhí)行的那些任務(wù) 只有前一個(gè)任務(wù)執(zhí)行完畢,才能執(zhí)行后一個(gè)任務(wù) (2) 異步任務(wù) 又叫 耗時(shí)任務(wù) ,異步任務(wù)由JavaScript委托給宿主環(huán)境進(jìn)行執(zhí)行 當(dāng)異步任務(wù)執(zhí)行完成后,會(huì)通知

    2024年02月09日
    瀏覽(23)
  • 造個(gè)輪子-任務(wù)調(diào)度執(zhí)行小框架-IOC容器實(shí)現(xiàn)

    造個(gè)輪子-任務(wù)調(diào)度執(zhí)行小框架-IOC容器實(shí)現(xiàn)

    忙里偷閑,今天終于是把概率論這塊骨頭干下來(lái)了。所以的話,留了點(diǎn)時(shí)間,把整個(gè)項(xiàng)目的結(jié)構(gòu)和基本的功能給實(shí)現(xiàn)以下。通過(guò)昨天的一個(gè)功能的一個(gè)設(shè)計(jì),我想應(yīng)該可以明白我想干啥吧。這里的話,重復(fù)一下,那就是俺們要搞一個(gè)任務(wù)執(zhí)行框架。 這個(gè)框架到底有啥用?舉個(gè)

    2024年02月13日
    瀏覽(26)
  • linux-crontab每分鐘定時(shí)執(zhí)行/定時(shí)任務(wù)調(diào)度

    linux-crontab每分鐘定時(shí)執(zhí)行/定時(shí)任務(wù)調(diào)度

    本文講解linux上如何調(diào)用定時(shí)任務(wù),如每分鐘打印日志,每日24點(diǎn)執(zhí)行日志切割腳本等等。 在Linux系統(tǒng)中,crontab命令是一個(gè)用于執(zhí)行定時(shí)任務(wù)的命令, crond(crontab)是系統(tǒng)默認(rèn)自帶的定時(shí)服務(wù) 。我們可以通過(guò)編輯crontab文件來(lái)設(shè)置定時(shí)任務(wù),使系統(tǒng)可以自動(dòng)按照設(shè)定的時(shí)間和頻率

    2024年02月06日
    瀏覽(38)
  • XXL-JOB 任務(wù)調(diào)度中心 后臺(tái)任意命令執(zhí)行漏洞

    XXL-JOB 任務(wù)調(diào)度中心 后臺(tái)任意命令執(zhí)行漏洞

    在日常開(kāi)發(fā)中,經(jīng)常會(huì)用定時(shí)任務(wù)執(zhí)行某些不緊急又非常重要的事情,例如批量結(jié)算,計(jì)算當(dāng)日的訂單量,當(dāng)日的成本收入等。當(dāng)存在大量定時(shí)任務(wù)的時(shí)候,任務(wù)的管理也會(huì)成為一個(gè)比較頭痛的問(wèn)題。xxl-job,就是一個(gè)比較成熟的分布式任務(wù)調(diào)度平臺(tái)。XXL-JOB 任務(wù)調(diào)度中心系統(tǒng)

    2024年02月08日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包