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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值