我想在用戶註冊後立即發送電子郵件。下面是這種情況:Spring MVC:並行發送響應和方法執行
- 用戶將提交報名表格
- 春季控制器將接受請求,將數據插入到數據庫,發送電子郵件給用戶。
事情是用戶應該馬上得到成功的註冊消息,電子郵件發送過程也應該並行運行,但不應該影響註冊成功響應。即接受電子郵件延遲,但註冊成功消息響應應該由於電子郵件過程而延遲。
我想在用戶註冊後立即發送電子郵件。下面是這種情況:Spring MVC:並行發送響應和方法執行
事情是用戶應該馬上得到成功的註冊消息,電子郵件發送過程也應該並行運行,但不應該影響註冊成功響應。即接受電子郵件延遲,但註冊成功消息響應應該由於電子郵件過程而延遲。
Spring的方式做到這一點是使用一個Async service發送電子郵件:
的@Async註釋可以提供一個方法,這樣的方法是調用將異步發生。換句話說,調用者將在調用時立即返回,並且方法的實際執行將發生在已提交給Spring TaskExecutor的任務中。
如果你不關心交易(即使數據庫插入失敗了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
如果要發送一千封電子郵件,它會是一個好方法嗎? – manish
爲什麼不呢? –
它是否爲每個請求創建單獨的線程?如果它不那麼認爲它是開銷 – manish