Spring中的 Async註解 非同步任務處理

2021-08-09 23:33:02 字數 1981 閱讀 5119

在開發中,我們往往有一些特殊的需求,例如log、郵件、使用者op的記錄、來訪者資訊的記錄等等。如果將這些操作放在他自己的執行緒中執行,會不會對程式造成阻塞呢?當高併發的情況下,任務的實時性還存在麼?

spring中為我們提供了@async註解,非同步的去處理。那如何去理解呢?

如果乙個方法上加了@async註解,表明這個方法將由乙個新執行緒區執行而呼叫他的方法還在原執行緒執行,就好比去單獨啟用了乙個服務去做記錄,而不是在原方法中執行記錄

注:加在類上代表該類中所有方法都為非同步,若方法也加了該註解,以方法的配置為準

proxy-target-class="true"/>

其中的proxy-target-class=」true」表示要使用乙個指定的類,讓spring來生成它的bean,並使用他的某個方法,「true」或「false」決定是基於介面還是基於類的**被建立,當true時基於類,預設為false

還包含其他屬性

//指定乙個省缺的執行器

executor="asyncexecutor"

task:executor的配置引數

//用@async("loggerexecutor")來指定

id="loggerexecutor"

//池大小

pool-size

="20-1000"

//佇列容量 決定了當任務達到多少時,pool建立新的執行緒去處理任務

queue

-capacity

="5"

//最大執行緒數

max size =

"10"

//最小執行緒數

core size =

"5"//當那些超過coresize的任務完成後 存活時間

keep-alive

="5"

//當達到最大執行緒數時如何處理

rejection-policy 省缺為丟擲taskrejectedexception異常,然後不執行

非同步方法

@async

public

void eventplay(string unipassportid,

string majorcode,

string coursecode,

string lessoncode,

string kpcode,

string videocode,

string majortitle,

string lessontitle,

string stagetitle,

string kptitle,

string videoplayurl,

string videofilename,

string playcnt,

string playvideotime)

原方法的呼叫片段

if (stringutils.

equals(eventtype, "videostart")) else

if (stringutils.

equals(eventtype, "videostop"))

@async同樣可以有返回值 型別為asyncresult實現了future介面

public

void

testasyncannotationformethodswithreturntype()

throws interruptedexception, executionexception

thread.sleep(1000);

} }

總結:這篇只是淺顯的介紹,該註解涉及的問題還有很多,包括像非同步情況下如何去處理異常問題,非同步的情況下,無法捕捉到非同步執行緒的異常,還有再非同步的情況下如何去做事務的管理等等 。 以後用到了更新。

Spring中 Async註解實現非同步

簡單介紹 spring為任務排程與非同步方法執行提供了註解支援。通過在方法上設定 async註解,可使得方法被非同步呼叫。也就是說呼叫者會在呼叫時立即返回,而被呼叫方法的實際執行是交給spring的taskexecutor來完成。async註解的開啟 如果是在springboot專案中使用的話,則更...

Spring非同步方法註解 Async

spring 配置檔案增加以下配置 注意點 在同乙個類中 乙個方法呼叫另外乙個有註解 比如 async,transational 的方法,註解是不會生效的。在呼叫 async方法的類後面新增註解 enableasync 在被呼叫的方法增加 async註解 呼叫和被呼叫,不能在乙個類裡面定義,要分開定...

spring註解之 Async小測試

這個註解看著async應該可以猜測用途,那就是非同步。這個註解是用來將某個被標註的方法給弄成非同步的效果,達到new thread的作用,博主也趕緊拿來了 測試。非同步我最先是在js學習時,ajax提交那裡第一次接觸,有乙個async屬性,來設定這個ajax是非同步還是同步。如下偽 所示 funct...