0

所以,我意识到数据库池可能有比 JDBC 更好的选择,但仍有一些东西让我发疯。在所有示例代码中,他们建议像这样进行池化。

GenericObjectPool connectionPool = new GenericObjectPool(null);

ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(url, un, pw);

PoolableConnectionFactory poolableConnectionFactory = 
           new PoolableConnectionFactory(connectionFactory, connectionPool, null, "SELECT 1", false, true);
PoolingDataSource dataSource = new PoolingDataSource(connectionPool);

return dataSource;

为什么要创建 PoolableConnectionFactory?它从未使用过,从查看源代码来看,我看不出它实际上将构造函数中的任何东西联系在一起,或者除了设置它自己的私有变量之外还有什么神奇的作用。JDBC 站点的信息相当神秘,我对源代码的所有挖掘都让我感到困惑。有理由这样做吗?显然,您也可以只用 new 实例化对象,而无需实际将其分配给变量,这就足够了……让我更加困惑。

4

1 回答 1

1

假设这些类是 commons-DBCP 类,则将PoolableConnectionFactory正在创建的实例注册为作为参数传递的池的工厂的构造函数:

_pool = pool;
_pool.setFactory(this);

因此,创建工厂会创建它,并让池在需要时使用它来创建新连接。

于 2012-07-18T08:32:15.843 回答