簡單介紹
spring為任務排程與非同步方法執行提供了註解支援。通過在方法上設定@async註解,可使得方法被非同步呼叫。也就是說呼叫者會在呼叫時立即返回,而被呼叫方法的實際執行是交給spring的taskexecutor來完成。
@async註解的開啟
如果是在springboot專案中使用的話,則更加簡單。只需要在啟動類上面加乙個註解:@enableasync即可,如:
**實現
@enableasync //開啟非同步呼叫
public static void main(string args) }
接下來我們要進入例項部分,我通過乙個聊天對話的demo來介紹。
呼叫方法依次為1,2,3。現在我想實現的是如下場景:
(1)a:你愛我嗎?
(3)a:你不回我,肯定不愛我,分手吧!
(2)b:當然愛你!(這裡假設有延遲,導致訊息不及時,a沒有收到)
如果這裡不用非同步實現的話,在3之前一定會等到2完成,所以最終導致對話是:
(1)a:你愛我嗎?
(2)b:當然愛你!(沒有延遲的情況下)
(3)a:你不回我,肯定不愛我,分手吧!
package com.example.demo.test_demo;
import org.springframework.scheduling.annotation.async;
import org.springframework.stereotype.component;
@component
public class chattest
public void chat2() catch (interruptedexception e)
}public void chat3()
}
package com.example.demo.controller;
import com.example.demo.test_demo.chattest;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.web.bind.annotation.restcontroller;
@restcontroller
public class chatcontroller
}
執行結果如下:
可以看到我們的目的還沒有達到,現在我們在chat2方法上面加上@async註解,
執行一下,結果如下:
可以看出,非同步生效了,
在呼叫方法3的時候,還沒有等到方法2執行結束便執行了3。所以才能達到我們最終的情境。
總結其實在我們實際應用中,大多數方法都是用同步的。但是在處理與第三方系統互動的時候,容易造成響應遲緩的情況,之前大部分都是使用多執行緒來完成此類任務,其實,在spring 3.x之後,就已經內建了@async來完美解決這個問題。所以本篇的這個教程還是相當實用的~~~~
Spring非同步方法註解 Async
spring 配置檔案增加以下配置 注意點 在同乙個類中 乙個方法呼叫另外乙個有註解 比如 async,transational 的方法,註解是不會生效的。在呼叫 async方法的類後面新增註解 enableasync 在被呼叫的方法增加 async註解 呼叫和被呼叫,不能在乙個類裡面定義,要分開定...
Spring中的 Async註解 非同步任務處理
在開發中,我們往往有一些特殊的需求,例如log 郵件 使用者op的記錄 來訪者資訊的記錄等等。如果將這些操作放在他自己的執行緒中執行,會不會對程式造成阻塞呢?當高併發的情況下,任務的實時性還存在麼?spring中為我們提供了 async註解,非同步的去處理。那如何去理解呢?如果乙個方法上加了 asy...
spring註解之 Async小測試
這個註解看著async應該可以猜測用途,那就是非同步。這個註解是用來將某個被標註的方法給弄成非同步的效果,達到new thread的作用,博主也趕緊拿來了 測試。非同步我最先是在js學習時,ajax提交那裡第一次接觸,有乙個async屬性,來設定這個ajax是非同步還是同步。如下偽 所示 funct...