最近写数据导出时碰到的问题

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流。

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