ami*_*ngh 2 java multithreading connection-pooling
我正在使用Executors编写连接池.我的问题是,当数据库关闭时,池中的所有连接都将成为无效连接.
一种方法是定期刷新连接池,或检查连接的有效性.处理此类问题的最佳方法是什么?
首先,如果你不是绝对的,绝对没有办法,必须自己编写,这是重塑一个完美的精细轮子的真正典型案例.interwebz上有很多精细和花花公子的连接池实现.
我(以及其他许多人)使用Apache DBCP:http://commons.apache.org/dbcp/
如果你有某种超级特殊的数据库,你至少可以依赖现有的池化解决方案,如Commons Pool:http://commons.apache.org/pool/
你知道,使用apache的东西可以让你和那些很酷的孩子坐在一起;)
那么,如果你真的要写自己的话我会建议:
无论何时请求连接,请检查其是否有效.没办法解决这个问题.如果它不再有效,要么立即删除池中的所有连接(假设它们都是无效的),要么只是获取下一个连接,然后删除您选中的连接.重复,直到找到有效的或者您必须增加池.增长池将需要检查有效性并在无法建立新连接时中止(显然).否则你手上会有一些精细的无限循环.
检查池并清理它和/或根据需要增长它的辅助线程似乎也很好.只是不要单独依赖它,因为它很可能会错过无效的连接,你仍然会提供不可用的池元素.
线程(或线程)可能仅用于加速(检查/增长池),但不适合自己完成工作.您必须根据请求检查/增长,辅助线程仅帮助避免这种情况.
| 归档时间: |
|
| 查看次数: |
740 次 |
| 最近记录: |