springboot實(shí)現(xiàn)定時任務(wù)@Scheduled方式
@Scheduled
只適合處理簡單的計劃任務(wù),不能處理分布式計劃任務(wù)。
優(yōu)勢:是spring框架提供的計劃任務(wù),開發(fā)簡單,執(zhí)行效率比較高。
且在計劃任務(wù)數(shù)量太多的時候,可能出現(xiàn)阻塞,崩潰,延遲啟動等問題
- 啟動類中加入@EnableScheduling
- 要開啟定時任務(wù)的方法上加入@Scheduled
- 設(shè)置任務(wù)執(zhí)行的時間間隔
@EnableScheduling注解的作用是啟用Spring的計劃任務(wù)執(zhí)行能力。
注意:
@EnableScheduling只應(yīng)用于它的本地應(yīng)用程序上下文,允許在不同級別選擇性地調(diào)度bean。
@Scheduled標(biāo)記要調(diào)度的方法的注釋。必須指定cron、fixedDelay或fixedRate屬性中的一個。
帶注釋的方法必須沒有參數(shù)。 它通常有一個void返回類型; 如果不是,則通過調(diào)度器調(diào)用返回值時將被忽略。
比較常用的有兩種方式去設(shè)置時間間隔,fixedRate和cron表達(dá)式
第一種:設(shè)置時間間隔的方式是fixedRate屬性
這種方式比較簡單,只適用于對時間掌控不是很高的情況下,例如,每分鐘執(zhí)行一次,部分白天還是黑夜。
@Scheduled(fixedRate = 301000):
- 表示每30秒執(zhí)行一次。
- 這個也是按照時間進(jìn)制來的,1000代表是毫秒進(jìn)制30代表就是30秒,若是想每小時執(zhí)行一次也是可以繼續(xù)16060*1000。
@Scheduled(fixedRate = 30*1000)
public void he(){
System.out.println("女神吃藥"+ DateFormat.getDateTimeInstance().format(new Date()));
}第二種:cron表達(dá)式
@Scheduled(cron = "* * 9-22 * * ?")
public void show(){
System.out.println("女神喝水"+ DateFormat.getDateTimeInstance().format(new Date()));
}上述cron表達(dá)式代表的是:我每個月 每天 9-22時 的每分每秒都執(zhí)行一次。
cron表達(dá)式的時間格式是cron= “秒 分鐘 小時 天 月 星期”
- 有興趣學(xué)習(xí)cron表達(dá)式的同學(xué)可以點(diǎn)擊下面的鏈接,里面有阿里云提供的詳細(xì)的教程。
- https://help.aliyun.com/knowledge_detail/64769.html
異步多線程定時任務(wù)
@Scheduled 在計劃任務(wù)數(shù)量太多的時候,可能出現(xiàn)阻塞,崩潰,延遲啟動等問題
為了解決這個問題,我們可以采用異步多線程的方式,利用多個線程來管理定時任務(wù),不讓任務(wù)丟失
- Application啟動類中加入開啟異步操作的注解 @EnableAsync
- 在要異步開啟定時任務(wù)的方法上加入異步注解 @Async
這樣就不會一個任務(wù)沒有執(zhí)行完畢,而阻塞另一個任務(wù)的執(zhí)行
@EnableAsync啟用Spring的異步方法執(zhí)行功能@Async將方法標(biāo)記為異步執(zhí)行候選方法的注釋。也可以在類型級別使用,在這種情況下,所有類型的方法都被認(rèn)為是異步的。但是請注意,@Configuration類中聲明的方法不支持 @Async 。
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
springBoot使用mybatis-plus插件實(shí)現(xiàn)分頁過程
本文介紹了MyBatisPlus的集成步驟,包括項(xiàng)目結(jié)構(gòu)調(diào)整、pom.xml依賴添加、MyBatisPlusConfig配置文件創(chuàng)建與配置、具體代碼實(shí)現(xiàn)(controller、service、dao、xml)、SQL結(jié)果打印、自定義分頁等環(huán)節(jié),此經(jīng)驗(yàn)總結(jié)供讀者參考學(xué)習(xí)2026-04-04
SpringBoot?ApplicationContext接口深入分析
ApplicationContext是Spring應(yīng)用程序中的中央接口,由于繼承了多個組件,使得ApplicationContext擁有了許多Spring的核心功能,如獲取bean組件,注冊監(jiān)聽事件,加載資源文件等2022-11-11
Java實(shí)現(xiàn)局域網(wǎng)IP地址掃描
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)局域網(wǎng)IP地址掃描,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05
Java聊天室之實(shí)現(xiàn)獲取Socket功能
這篇文章主要為大家詳細(xì)介紹了Java簡易聊天室之實(shí)現(xiàn)獲取遠(yuǎn)程服務(wù)器和客戶機(jī)的IP地址和端口號功能,文中的示例代碼講解詳細(xì),需要的可以了解一下2022-10-10
mybatis plus saveOrUpdate實(shí)現(xiàn)有重復(fù)數(shù)據(jù)就更新,否則新增方式
這篇文章主要介紹了mybatis plus saveOrUpdate實(shí)現(xiàn)有重復(fù)數(shù)據(jù)就更新,否則新增方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12

