我想在我的Web應用程序中成功更新配置文件後發送電子郵件並更新活動日誌。爲了發送郵件和更新活動日誌,我想要使用線程,以便配置文件更新響應可以立即發送回客戶端,並且可以通過線程處理後續操作。請建議一個實施。如何在Spring MVC中使用多線程概念進行後續操作
回答
有很多方法可以實現這一點,它是一個Spring MVC應用程序幾乎是不相關的。
如果您使用的是Java 8,那麼你可以簡單地在執行程序服務調用給你從池中的線程:
String emailAddress = //get email address...
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.submit(() -> {
emailService.sendNotification(emailAddress);
});
前的Java 8:
final String emailAddress = "";
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
emailService.sendNotification(emailAddress);
}
});
thread.start();
如果您'創建一個更復雜的應用程序,那麼你應該看看可能使用的消息隊列(ActiveMQ是好的)。這允許您在添加更多異步任務時更好地進行控制和可見性並進行擴展,這也意味着如果同時存在大量註冊,則不會讓線程的應用程序服務器捱餓。
謝謝你的建議。 – abhiagNitk
您可以使用BlockingQueue並實施生產者 - 消費者模型來解決問題。您現有的程序充當生產者,它將一個令牌添加到BlockingQueue中,並且一個執行程序(由Executors.newFixedThreadpool創建)可以執行所有後續操作。您可以引用Javadocs並創建您的Spring上下文(如XML或註釋)。你
也可以指CompletionSerive
產卵一個線程來發送和電子郵件一樣,當保存配置文件是不是一個好主意。因爲它可能會導致線程太多,並且上下文切換可能會導致完成延遲。因此建議使用固定線程池。
可以使用JMS隊列。但對於給定的場景來說,它看起來像是過度殺傷力。因此建議使用BlockingQueue。
謝謝你的建議。 – abhiagNitk
- 1. 多線程概念
- 2. 如何使用Spring實現多線程概念?
- 3. 何處使用多線程概念
- 4. 如何在Spring中應用MVC概念(非web應用程序)
- 5. 如何在Spring中使用Filter概念?
- 6. 如何使用線程概念在countdowntimer中運行後臺應用程序?
- 7. 線程概念
- 8. 線程概念
- 9. C#:線程和多線程的概念
- 10. java中多線程的概念
- 11. Java線程概念
- 12. 如何在多線程概念的spring批處理中寫入單個文件
- 13. java多線程的核心概念
- 14. JMS多線程概念與MQ
- 15. Wait()和Notify()概念 - Java多線程
- 16. 在C++中使用向量進行多線程操作
- 17. C#多線程概念問題
- 18. C++程序線程概念
- 19. Laravel MVC概念
- 20. 對多線程概念有點困惑
- 21. 使用抽象概念進行翻譯
- 22. 線程和塊概念
- 23. MVC實現概念(概念(ABAP SAP)
- 24. 概念線程問題
- 25. 學習線程概念
- 26. Java線程概念/演示
- 27. 無法使用線程概念顯示進度條?
- 28. 如何執行多線程概念從Core數據中獲取多個數據?
- 29. 在Javascript中實現線程概念?
- 30. 在java中使用通用概念的生成操作
在配置文件表中保留一個標誌列。您必須使用cron表達式編寫單獨的cron作業。在方法中編寫一個單獨的邏輯並在cron作業執行方法中調用該方法。該方法應該使用標誌執行搜索,該函數需要執行的記錄是什麼。發送電子郵件(和活動日誌)後,您可以更新標誌。 – Sanka
我不需要添加一個標誌,此外,我想知道代碼實現。 – abhiagNitk
好的。當電子郵件服務器崩潰或應用程序服務器關閉過程。會話將終止,您無法使用此過程捕獲未處理的內容。 – Sanka