您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Springboot異步任務和定時任務如何處理”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Springboot異步任務和定時任務如何處理”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
在 Springboot
中,異步任務和定時任務是經常遇到的處理問題方式,為了能夠用好這兩項配置,不干擾正常的業務,需要對其進行異步化配置。怎么設置合理的異步處理線程就是其核心和關鍵。
在項目中使用異步任務是經常遇到的解決問題方式,通常是為減少請求的等待時間,將業務處理進行異步后臺處理,可以改善用戶的體驗,增加系統的吞吐量。
在 springboot
中開啟異步任務,也是十分的簡單,只需要兩步操作:
1 開啟 @EnableAsync
注解。
2 在需要異步處理的方法上添加 @Async
。
需要說明的是異步執行的方法可以有返回值,但是必須是 Future
,這里和多線程 submit
的方式提交任務,獲取處理結果的方式。
到此為止,異步任務的配置和使用就結束了。異步任務使用的也是多線程線程池技術,默認情況下采用的是 SimpleAsyncTaskExecutor
來實現,但是自己的命運怎么能交到他人手上呢,總覺得不太踏實,異步任務怎么才能使用自定義的線程池去實現呢,這是一個好問題,答案也是有的,那就是 AsyncConfigurer
。這是一個接口,需要實現 getAsyncExecutor
方法來獲取一個線程池,如果需要異常信息的抓取,則在實現一個方法 getAsyncUncaughtExceptionHandler
即可。
具體的代碼如下所示:
異步任務執行結果如下,可以說明異步任務的線程池配置已經生效:
定時任務在項目開發中可以說是很常用的配置,作為業務功能的補償而存在,有這舉足輕重的地位,對于定時任務的使用,可以分為固定時間和 crontab
表達式,在實現的工具上,有 spring
自帶的 @Schedule
,在單體項目中應用廣泛,不需要借助其它的平臺和額外的配置,對于簡單的任務來說已經足夠,但是對于分布式系統來說,就有點兒力不從心了,這時就誕生了 quartz、 elastic-job 和 xxl-job
等,其中 xxl-job
尤為出色。在這里,只介紹一下 @Schedule
的使用:
1 全局開啟 @EnableScheduling
注解。
2 在需要執行的任務上添加 @Schedule
注解,并指定執行方法,是固定執行還是采用 cron
表達式。
在實際的項目開發中,crontab
表達式應用還是很廣泛的:
和異步任務執行一樣,定時任務的執行也是有自己的異步任務線程池,這里需要實現的接口為 SchedulingConfigurer
,實現其 configureTasks
方法即可:
在一切配置文件做好后,運行后可以看出定時任務的線程池配置已經生效:
讀到這里,這篇“Springboot異步任務和定時任務如何處理”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。