[讨论][实现数据库连接池应该考虑到的问题?]
我相信这里有很多高手自己写过数据库连接池,请问各位在自己写连接池的时候是否考虑到下面的问题,我是这样考虑的:
某个Connection被归还到连接池后当再次被利用时应该不能被上次用过该连接的程序影响。所以我用了一个MyConnection类实现Connection接口然后来代理实际的Connection的操作,连接池返回的实际上是MyConnection的实例,MyConnection的close方法其实是把连接返回给连接池。而且在调用每个Connection接口的方法时都去检查该连接是否已经被返还,如果是则抛异常。我原本以为这样当一个连接被close后那么就不会对其他使用该连接的程序有影响,但后来又想到下面的代码:
Connection conn = DBManager.getConnection();
Statement stmt = conn.createStatement();
conn.close();
stmt.executeQuery(sql);//
...
//以下虽然对conn不能操作了,但是仍然能对stmt操作
DBManager是连接池的实现者这样虽然连接已经被返还给连接池了,但是stmt还是可以用的,所以被重用的连接还是会受到干扰。除非在实现自己的Statement类和Result类等,太多了。
我的想法是否有问题,是否是我对连接池的概念有错误?还是我的实现方法有问题?
请各位指出,欢迎大家讨论。