精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-04-21
Lucas Lee 写道 既然这样的话,我也觉得包装Connection,然后delegate到实际的Connection上,除了在prepareStatement,createStatement等方法上做一些处理,将Statement对象记录下来;等Connection.close()时,调用所有Statement.close()。
可能是我没说明白 我知道这种方式可以 也知道是最好的实现方式 但我的核心问题就是 "在prepareStatement,createStatement等方法上做一些处理,将Statement对象记录下来" 那么怎么记录? 你不能记录当前链接打开的所有的的Statement,因为这样是不安全的吧 因为使用了池,会出现关闭不想关闭的Statement的情况. 所以我真正想问的是 " 使用 ThreadLocal对象记录 当前conn在当前线程内打开的所有的Statement. 这样的思路可以不 "?? 而不是该使用什么样的模式来实现这个功能 |
|
返回顶楼 | |
发表时间:2007-04-21
fins 写道 所以我真正想问的是 " 使用 ThreadLocal对象记录 当前conn在当前线程内打开的所有的Statement. 这样的思路可以不 "?? 我觉得这样没有什么问题。 但我不觉得应该用ThreadLocal来记录,一个Connection应该只给一个线程使用(在连接池情况下,也是被close()之后才可以分配给其他线程的。),所以用一般的容器类存放所有此连接上打开的Statement就可以了,在connection.close()时,调用容器中所有的Statement.close(),并清空容器。 |
|
返回顶楼 | |
发表时间:2007-04-22
谢谢 你解开了我一大疑问啊
我对池的一些知识确实很匮乏 谢谢指点 "在连接池情况下,也是被close()之后才可以分配给其他线程的" 这句话正是我想知道的 谢谢 |
|
返回顶楼 | |
发表时间:2007-04-26
在连接池情况下,也是被close()之后才可以分配给其他线程的
确定? |
|
返回顶楼 | |
发表时间:2007-07-12
建议不要这样,这样的话维护较为困难,我的方法是代理连接池,spring也可采用第三方数据源,写个connection代理,new YouCnnection(Connection delegate).这样对于系统是透明的,默默地把资源回收了
代理里面想解决关闭statement的事,不用说大家也知道怎么做了吧。 |
|
返回顶楼 | |
发表时间:2007-07-12
楼上才是正解,原有代码不做任何修改; 出现这种问题,spring完全没有用好。 |
|
返回顶楼 | |