2013-10-05 81 views
0

我想在用戶註冊後立即發送電子郵件。下面是這種情況:Spring MVC:並行發送響應和方法執行

  • 用戶將提交報名表格
  • 春季控制器將接受請求,將數據插入到數據庫,發送電子郵件給用戶。

事情是用戶應該馬上得到成功的註冊消息,電子郵件發送過程也應該並行運行,但不應該影響註冊成功響應。即接受電子郵件延遲,但註冊成功消息響應應該由於電子郵件過程而延遲。

回答

1

Spring的方式做到這一點是使用一個Async service發送電子郵件:

的@Async註釋可以提供一個方法,這樣的方法是調用將異步發生。換句話說,調用者將在調用時立即返回,並且方法的實際執行將發生在已提交給Spring TaskExecutor的任務中。

+0

如果要發送一千封電子郵件,它會是一個好方法嗎? – manish

+0

爲什麼不呢? –

+0

它是否爲每個請求創建單獨的線程?如果它不那麼認爲它是開銷 – manish

0

如果你不關心交易(即使數據庫插入失敗了email發送)可以通過例如並行與執行框架執行:

ExecutorService executor = Executors.newFixedThreadPool(2); 

executor.execute(new DbInsertRunnable()); 
executor.execute(new EmailSendingRunnable()); 

// This will make the executor accept no new threads 
// and finish all existing threads in the queue 
executor.shutdown(); 
// Wait until all threads are finish 
executor.awaitTermination(); 

你可以找到更多關於併發這裏http://docs.oracle.com/javase/tutorial/essential/concurrency/executors.html