2014-03-13 69 views
1

我正在創建一個具有一個Upload按鈕(用於上載XLS並稍後在數據庫中更新此數據)的JSP頁面。只要用戶點擊Upload按鈕,它就會讀取XLS文件並準備一個將傳遞給方法(m1(List a))的對象列表來執行SQL查詢。 現在的問題是,我有這個方法(m1(List a))大約100 SQL查詢,大約需要30分鐘才能完成。 所以我不希望用戶等到此方法完成數據庫進程。 有沒有什麼辦法可以調用我的方法來更新數據庫,而不用等待這個數據庫操作的響應,我可以響應用戶該文件已經上傳,數據庫進程已經啓動,將在一段時間後完成。在向java中的服務器發送請求之後不要等待響應

+0

30 _minutes_?看起來像其他地方有一個問題開始...無論如何,這裏的解決方案是使用'Executor'並提交數據庫操作。 – fge

回答

1

將請求 - 響應週期之外的工作交給ExecutorService

private void doDatabaseWork(Input input) { 
    BackgroundWorkTask task = new BackgroundWorkTask(input); 
    executorService.submit(task); 
    // since the work is now handed off to a separate pool of 
    // threads, the current HTTP-handling thread will continue 
    // here and return a response to the user 
} 

public class BackgroundWorkTask implements Runnable { 
    public void run() { 
     // put all of your database querying operations in here 
    } 
} 

確保,因爲這是一個Web應用程序,你有辦法關機,當Web應用程序停止ExecutorService的 - 這也將會給ExecutorService的一個機會,允許之前完成任何正在進行的工作容器停止。

相關問題