java - 为什么我们要创建 PoolableConnectionFactory 对象

标签 java jdbc-pool

所以,我意识到数据库池可能有比 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?它从未被使用过,从源代码来看,我看不出它实际上在构造函数中将任何东西联系在一起,或者除了设置它自己的私有(private)变量之外还做了任何神奇的事情。 JDBC 站点的信息相当神秘,我对源代码的所有挖掘都让我感到困惑。有理由这样做吗?显然,你也可以只用 new 实例化对象,而不实际将其分配给变量,这就足够了......让我更加困惑。

最佳答案

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

_pool = pool;
_pool.setFactory(this);

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

关于java - 为什么我们要创建 PoolableConnectionFactory 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11537213/

相关文章:

java - 内存峰值尝试加载大量对象并流式传输到 csv

java - 为什么 "Set()"功能比修改公共(public)变量更好?

java - 由以下代码创建的 DBCP 对象从未关闭

tomcat - Tomcat DBCP 是否支持 JDBC4 isValid() API?

java - H2 - Tomcat jdbc 连接池在达到最大限制后不回收连接

java - JSON/Jackson 输出在每个节点上意外添加 "parent"元素

java - Maven 编译错误 : Fatal error compiling: invalid target release: 1. 8

java - 我在 java 中的 endTime 有问题

java - Tomcat 错误 : java. sql.SQLException: No suitable driver found for jdbc:sqlserver://