2016-09-21 108 views
3

我使用struts2爲客戶生成基於網絡的發票,同時發送發票,我正在向用戶發送電子郵件和短信。生成發票後,我將頁面重定向到生成的發票頁面。減少代碼的執行時間

我的代碼是像下面

public generateInvoice(Invoice invoce) 
{ 
    int i=DB.insert(invoice); 
    if(i==1) 
    { 
     DB.sendEmail(invoice); 
     Db.smsInvoiceIinvoice); 
    } 
    redirect to generatedInvoice page 
} 

其中db是類的物體插入數據以及電子郵件和短信invice。 我的問題是,當生成發票發送電子郵件和發送短信花費太多的時間。

另一種方式,我認爲是後代發票我將重定向到生成的發票頁從那裏我會發送短信和電子郵件給用戶,但問題是,如果用戶將立即點擊另一個頁面鏈接,那麼可能有問題。

我該如何縮短這個時間?

+0

您可以同時處理'sendEmail'和'smsInvoice'。 – niyasc

+0

任何示例或代碼鏈接? – xrcwrn

+1

這對你有訣竅.. struts2支持異步動作http://stackoverflow.com/questions/12844797/struts2-async-action – mhasan

回答

0

您應該回答的第一件事是:sending emailsending sms可以並行完成嗎?如果這是真的,那麼你可以爲每個線程創建一個線程,並讓它們一起執行。完成兩個線程後,您的操作就完成了。這樣執行的總時間將是最長線程的時間。

我認爲主要的問題是,用戶只會看到一個惱人的瀏覽器等待ststus,而電子郵件和短信發送。您可以使用Struts 2執行和等待攔截器(http://struts.apache.org/docs/execute-and-wait-interceptor.html)。

的ExecuteAndWaitInterceptor是偉大的,在後臺運行長期行動 同時顯示用戶一個不錯的進度表。當 動作超過5或10分鐘時,此 還可以防止HTTP請求超時。

請注意,這個攔截器不會減少執行時間,但會使用戶友好。