精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-10-28
楼上打字累不累
|
|
返回顶楼 | |
发表时间:2011-10-28
java_user 写道 楼上打字累不累
做出不靠谱的程序更累... |
|
返回顶楼 | |
发表时间:2011-10-28
linenlin01 写道 ddkk 写道 linenlin01 写道 每个Export new 一个 TestExcelExport 对象!!!如果出现OOM,你得考虑换一个写Excel的方式,拒绝POI,拒绝JXL。用文件流来写,避免创建太多对象,导致OOM。
POI,JXL这种都是每个CELL一个OBJECT,很多字节的 当初也用过以二进制流写成BIFF格式,网上有个例子,还有个BUG,改了一个 << 操作的地方才可以的 但是发现用EXCEL 2003还是2007打开后,不能修改,格式也不好控制 LZ试下BIRD-X 其实我更喜欢直接写出html文本流,然后加一个xls扩展名:) 以前2003可以这么用,现在的2007、2010打开时,总是出现非预期格式提示,UI不友好 |
|
返回顶楼 | |
发表时间:2011-10-28
lineagezd 写道 如果对实时性要求不高的话建议可以采取异步的方式,点了之后可以某个位置生成报告稍后让客户查看。后台的话就是做了一套逻辑封装一个队列依次执行,这样肯定不会有oom的问题,如果实时性要求较高的话,可以测试下,采用对象池把这些对象先虚拟出来要用时,直接取,并发大的话,就对上限做个限制,人多个话,只能稍候再试,对象池多大这个要看内存及并发需求来看了
以前的每月统计是用这个方法的。 |
|
返回顶楼 | |
发表时间:2011-10-29
linenlin01 写道
package test; writer.write("</tr>"); writer.flush(); i++; } index_start=index_start+max_record; if(index_start%record_per_page==0||index_start==Integer.parseInt(total_record)){ writer.write("</table>"); writer.write("</body>"); writer.write("</html>"); writer.flush(); writer.close(); } } }catch(Exception e){ log.info("生成文件出错",e); } } }
还是把代码贡献出来吧。藏着掖着,自己也是不会进步滴...原来的Excel设置的格式是提供给其他系统使用的,所以格式需要使用者自己调整。每个文件6w条记录,超过6w条将创建一个新文件。
此方法非常简便,就是excel文件打开时有格式提示 |
|
返回顶楼 | |
发表时间:2011-10-29
linenlin01 写道 java_user 写道 楼上打字累不累
做出不靠谱的程序更累... 支持 |
|
返回顶楼 | |
发表时间:2011-10-29
你的问题主要是:类的属性冲突。
解决这个问题只需要确保每个线程的类属性都有自己独立的副本,不受其他线程影响。 把类属性放到java.lang.ThreadLocal<T>中。 这是java.lang.ThreadLocal<T> api的描述: 该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 private static 字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联 具体用法我就不写了,看一下api,相信楼主应该能解决吧。 |
|
返回顶楼 | |
发表时间:2011-10-29
zhuhaitaode 写道 你的问题主要是:类的属性冲突。
解决这个问题只需要确保每个线程的类属性都有自己独立的副本,不受其他线程影响。 把类属性放到java.lang.ThreadLocal<T>中。 这是java.lang.ThreadLocal<T> api的描述: 该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 private static 字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联 具体用法我就不写了,看一下api,相信楼主应该能解决吧。 兄弟你说的非常正确。我之前的service类使用bean做映射的,每次用的时候getBean,并发的时候,这个getbean出来的class就有问题了。现在去掉了,每次new一个,已经解决问题。 看了下api,你说的方法应该也是可以的,集思广益啊! 3ks |
|
返回顶楼 | |
发表时间:2011-10-29
excel的导出如果给人看,那么直接导出数据修改拓展名会很简单,但是如果他们是要导入到其他系统呢,其他系统的接口处理的是正常的excel,这样就不行了
|
|
返回顶楼 | |
发表时间:2011-10-29
请输入用户名 写道 excel的导出如果给人看,那么直接导出数据修改拓展名会很简单,但是如果他们是要导入到其他系统呢,其他系统的接口处理的是正常的excel,这样就不行了
的确是个痛处啊。但是可以靠 " 文件 - 另存为 - Excel 95-2003 "的手工操作来解决。不论是读取还是写入,能避开大量的Object,使用流来处理是王道。 |
|
返回顶楼 | |