在專案開發中,我們經常會有非同步呼叫任務的需求,比如:
a.在與第三方系統資料互動時,需要另開乙個執行緒去執行互動任務
b.系統中日誌記錄不希望引起響應遲緩
c.簡訊、傳送郵件等
web.xml 3.0才開始支援非同步,spring3.2以上版本中提供了@async註解幫助我們更好的處理類似問題,以免引起阻塞導致請求響應不及時
注意:a.配置檔案中一定不要重複掃瞄使用@async註解的方法類的包,有重複掃瞄會導致@async註解失效,後者掃瞄會導致前者的非同步**失效
b.spring的非同步是作用於方法上,也就是@async是標註在方法上的
首先*.servlet.xml檔案引入命名空間配置:
xmlns:task=""
/spring-task.xsd
xml啟用配置方式:
配置意思:執行緒池中最小執行緒數為10,最大數為1000, 佇列的capacity數為10,任務完成後,執行緒池中保留最小執行緒數10,超出的在10s內未使用將被結束掉,
配置屬性 描述pool-sizecore size:最小的執行緒數,預設:1
max size:最大的執行緒數,預設:integer.max_valuequeue-capacity當執行緒池中最小的執行緒數被占用滿後,新的任務會被放進佇列queue裡面,當這個queue的capacity也被佔滿之後,pool裡面會建立新執行緒處理這個任務,直到匯流排程數達到了最大執行緒數maxsize,這時系統會拒絕這個任務並丟擲taskrejectedexception異常(預設配置的情況下,可以通過rejection-policy來決定如何處理這種情況)。預設值為:integer.max_valuekeep-alive超過coresize最小執行緒數的那些執行緒,任務完成後,再經過這個設定的時長(單位:秒)會被結束掉,這樣的話執行緒池可以動態的調整池中的執行緒數rejection-policyabort(預設):丟擲taskrejectedexception異常,然後不執行
discard:不執行,也不丟擲異常即放棄該執行緒
discard_oldest:丟棄queue中最舊的那個任務
caller_runs:不在新執行緒中執行任務,而是由呼叫者所在的執行緒來執行(不再非同步)
@async使用注意事項:
@async註解的方法中將無法產生事務管理的控制。如果想使用有@async註解的方法去呼叫加有@transactional註解的含有資料操作的方法達到事務控制目的,你需要用不同的類的方法來使用注釋@async或@transactional,也就是說@async和@transactional對同乙個類中的方法不會同時有效。
spring 非同步任務 開啟執行緒
一些介面操作可以畢竟費時,而tomact執行緒的數量又是有限的,想要提高web吞吐量可以在spring裡開啟非同步。spring預設的執行緒是有限的 反正預設的不太好之類的 需要自己手工配置個執行緒池效果會更好。configuration enableasync 開啟對非同步任務的支援 public...
非同步處理任務框架
非同步處理任務框架 非同步獲取頭像 第三個引數就是非同步任務執行完畢後的返回值 author administrator public class loadimageasyntask extends asynctask public inte ce loadimageasyntaskcallback...
sidekiq 非同步處理任務
1.安裝 gem install sidekiq或者在gemfile檔案中新增 gem sidekiq gem slim 1.3.0 gem sinatra 1.3.0 require nil2.掛載mount 可以讓你監控專案執行狀態 require sidekiq web mount sidek...