最近寫數據導出時碰到的問題

1.線程問題

數據導出時,由於調用了存儲過程,所以在後臺處理很多的東西,如果這時再次開啓另外一個任務,會造成服務器卡死的現象。所以爲了避免出現這種情況,使用了線程來調用存儲過程以及對數據的導出。

大概思路是:使用將map<String, Thread>放入到servletContext中,將線程放入到map中,在界面獲取這個map中的內容。如果map爲null,那麼說明當前服務器中沒有線程

在運行,說明此時服務器空閒。可以開啓新的任務。在線程開啓後,將線程對象放入map中,此時就可以實時掌握線程的運行情況。當線程運行完成後,在finally塊中需要將map

置空,保證下一次使用前map爲null。


2.界面刷新

在線程運行的過程中,界面需要進行刷新操作,來保證線程運行完成以後界面中任務的顯示狀態和內容會改變。此時,需要計時器函數的幫忙。

大概思路:界面使用了jQuery技術,使用applicationScope.XXX(attribute的內容)['key'] 可以獲取到servletContext中的內容。在$(function(){...});中定義每次刷新都會執行的

內容,就是計時器。 當獲取的內容不爲空時,有線程在運行,time = window.setInterval(fresh, 5000); 定義每個5S刷新一次,當內容爲null時,使用window.clearInterval(time)

關閉計時器,界面顯示完成後的最終效果。


3.額外需要注意

(1) 界面JS對時間的處理,需要判斷月份是否小於10來確定是否要給月份前邊加0.

(2) IO流讀取文件路徑:this.getSesion().getServletContext().getRealPath("/") + "/WEB-INF/...";

(3) 當寫入完成後需要進行flush()保證正常寫入,最後要關掉IO流。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章