spring使用Async實現非同步或者延遲的操作
對於我們的web專案,一般來說,我們都是同步執行一些資料,所謂同步就是按照順序,執行完這個然後有序的執行下一個,但是有時我們需要延遲執行一些資料,並且這些資料我們不需要實時的返回的,比如是註冊成功,我們會返回一封郵件給使用者,這個郵件我們可以在使用者註冊成功後的5分鐘,或者10分鐘後向使用者傳送,那麼我們就需要一個延遲函式。一般來說,我們可能直接就會使用new thread開啟一條執行緒來實現來實現,會在Spring mvc或者Struts中這樣實現
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
但是從spring 3.0版本開始,我們可以直接通過Async註解來實現我們的延遲操作了。
要使用Async註解,首先在applicationContext.xml加入如下程式碼
<task:annotation-driven/>
@ResponseBody
@RequestMapping(value = “/register”)
public String register(String username,String passwd) {
JSONObject jsonObject=new JSONObject();
jsonObject.put(“status”, 1000);
jsonObject.put(“username”, username);
AsyncSendMail(username);
return jsonObject.toString();
}
@Async
public void AsyncSendMail(String touser){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//執行傳送郵件的操作
System.out.println(“touser==”+touser);
}