2016-08-29 64 views
1

我想在我的Web應用程序中成功更新配置文件後發送電子郵件並更新活動日誌。爲了發送郵件和更新活動日誌,我想要使用線程,以便配置文件更新響應可以立即發送回客戶端,並且可以通過線程處理後續操作。請建議一個實施。如何在Spring MVC中使用多線程概念進行後續操作

+0

在配置文件表中保留一個標誌列。您必須使用cron表達式編寫單獨的cron作業。在方法中編寫一個單獨的邏輯並在cron作業執行方法中調用該方法。該方法應該使用標誌執行搜索,該函數需要執行的記錄是什麼。發送電子郵件(和活動日誌)後,您可以更新標誌。 – Sanka

+0

我不需要添加一個標誌,此外,我想知道代碼實現。 – abhiagNitk

+0

好的。當電子郵件服務器崩潰或應用程序服務器關閉過程。會話將終止,您無法使用此過程捕獲未處理的內容。 – Sanka

回答

1

有很多方法可以實現這一點,它是一個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是好的)。這允許您在添加更多異步任務時更好地進行控制和可見性並進行擴展,這也意味着如果同時存在大量註冊,則不會讓線程的應用程序服務器捱餓。

+0

謝謝你的建議。 – abhiagNitk

1

您可以使用BlockingQueue並實施生產者 - 消費者模型來解決問題。您現有的程序充當生產者,它將一個令牌添加到BlockingQueue中,並且一個執行程序(由Executors.newFixedThreadpool創建)可以執行所有後續操作。您可以引用Javadocs並創建您的Spring上下文(如XML或註釋)。你

也可以指CompletionSerive

產卵一個線程來發送和電子郵件一樣,當保存配置文件是不是一個好主意。因爲它可能會導致線程太多,並且上下文切換可能會導致完成延遲。因此建議使用固定線程池。

可以使用JMS隊列。但對於給定的場景來說,它看起來像是過度殺傷力。因此建議使用BlockingQueue。

+0

謝謝你的建議。 – abhiagNitk