如何为安全连接池编写逻辑

ami*_*ngh 2 java multithreading connection-pooling

我正在使用Executors编写连接池.我的问题是,当数据库关闭时,池中的所有连接都将成为无效连接.

一种方法是定期刷新连接池,或检查连接的有效性.处理此类问题的最佳方法是什么?

Dar*_*iop 5

首先,如果你不是绝对的,绝对没有办法,必须自己编写,这是重塑一个完美的精细轮子的真正典型案例.interwebz上有很多精细和花花公子的连接池实现.

我(以及其他许多人)使用Apache DBCP:http://commons.apache.org/dbcp/

如果你有某种超级特殊的数据库,你至少可以依赖现有的池化解决方案,如Commons Pool:http://commons.apache.org/pool/

你知道,使用apache的东西可以让你和那些很酷的孩子坐在一起;)

那么,如果你真的要写自己的话我会建议:

无论何时请求连接,请检查其是否有效.没办法解决这个问题.如果它不再有效,要么立即删除池中的所有连接(假设它们都是无效的),要么只是获取下一个连接,然后删除您选中的连接.重复,直到找到有效的或者您必须增加池.增长池将需要检查有效性并在无法建立新连接时中止(显然).否则你手上会有一些精细的无限循环.

检查池并清理它和/或根据需要增长它的辅助线程似乎也很好.只是不要单独依赖它,因为它很可能会错过无效的连接,你仍然会提供不可用的池元素.

线程(或线程)可能仅用于加速(检查/增长池),但不适合自己完成工作.您必须根据请求检查/增长,辅助线程仅帮助避免这种情况.

  • +1如果您要编写自己的产品,首先应了解现有产品的功能,并清楚了解现有产品的实现情况. (3认同)