首頁  >  文章  >  Java  >  Springboot非同步任務與定時任務如何處理

Springboot非同步任務與定時任務如何處理

PHPz
PHPz轉載
2023-05-25 20:05:121966瀏覽

1 前言

Springboot 中,非同步任務和定時任務是經常遇到的處理問題方式,為了能夠用好這兩項配置,不干擾正常的業務,需要對其進行非同步化配置。怎麼設定合理的非同步處理執行緒就是其核心和關鍵。

2 非同步任務設定

在專案中使用非同步任務是經常遇到的解決問題方式,通常是為減少請求的等待時間,將業務處理進行非同步後台處理,可以改善使用者的體驗,增加系統的吞吐量。

在 springboot 中開啟非同步任務,也是十分的簡單,只需要兩個步驟:

  • #1 開啟@EnableAsync 註解。

  • 2 在需要非同步處理的方法上加入 @Async

需要說明的是非同步執行的方法可以有回傳值,但是必須是 Future,這裡和多執行緒 submit 的方式提交任務,取得處理結果的方式。

到此為止,非同步任務的配置和使用就結束了。非同步任務使用的也是多執行緒執行緒池技術,預設採用的是 SimpleAsyncTaskExecutor 來實現,但是自己的命運怎麼能交到他人手上呢,總覺得不太踏實,異步任務怎麼才能使用自訂的執行緒池去實現呢,這是個好問題,答案也是有的,那就是 ​​AsyncConfigurer。這是一個介面,需要實作 getAsyncExecutor 方法來取得一個執行緒池,如果需要例外資訊的抓取,則在實作一個方法 getAsyncUncaughtExceptionHandler 即可。

具體的程式碼如下:

Springboot非同步任務與定時任務如何處理

#非同步任務執行結果如下,可以說明非同步任務的執行緒池配置已經生效:

Springboot非同步任務與定時任務如何處理

3 定時任務配置

定時任務在專案開發中可以說是很常用的配置,作為業務功能的補償而存在,有這舉足輕重的地位,對於定時任務的使用,可以分為固定時間和 crontab 表達式,在實現的工具上,有 spring 自帶的 @Schedule,在單體專案中應用廣泛,不需要藉助其它的平台和額外的配置,對於簡單的任務來說已經足夠,但是對於分散式系統來說,就有點兒力不從心了,這時就誕生了 quartz、 elastic-job 和xxl-job 等,其中 xxl-job 尤為優秀。在這裡,只介紹 @Schedule 的使用:

  • 1 全域開啟 @EnableScheduling 註解。

  • 2 在需要執行的任務上新增 @Schedule 註解,並指定執行方法,固定執行或採用 cron 表達式。

在實際的專案開發中,crontab 表達式應用還是很廣泛的:

Springboot非同步任務與定時任務如何處理

和非同步任務執行一樣,計時任務的執行也是有自己的非同步任務執行緒池,這裡需要實作的介面為 SchedulingConfigurer ,實作其 configureTasks 方法即可:

Springboot非同步任務與定時任務如何處理

在一切設定檔做好後,執行後可以看出定時任務的執行緒池設定已經生效:

Springboot非同步任務與定時任務如何處理

以上是Springboot非同步任務與定時任務如何處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除