gpt4 book ai didi

database-connection - 使用 Apache DBCP 进行连接池

转载 作者:行者123 更新时间:2023-12-03 11:07:56 26 4
gpt4 key购买 nike

我想使用 Apache Commons DBCP在 Java 应用程序中启用连接池(这里没有容器提供的数据源)。在网络的许多站点中 - 包括 Apache site - 库的使用基于此片段:

BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
ds.setUsername("scott");
ds.setPassword("tiger");
ds.setUrl(connectURI);

然后你通过 getConnection() 方法获得你的数据库连接。但在其他网站上 - 和 Apache Site also - 数据源实例是通过这个:
ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(connectURI,null);
PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory);
ObjectPool objectPool = new GenericObjectPool(poolableConnectionFactory);
PoolingDataSource dataSource = new PoolingDataSource(objectPool);

他们之间有什么区别?我正在使用 BasicDataSource 的连接池,或者我需要 PoolingDataSource 的实例使用连接池?是 BasicDataSource线程安全(我可以将它用作类属性)还是我需要同步它的访问?

最佳答案

BasicDataSource 是满足基本需求的一切。
它在内部创建一个 PoolableDataSource 和一个 ObjectPool。

PoolableDataSource 使用提供的 ObjectPool 实现 DataSource 接口(interface)。 PoolingDataSource 负责连接,而 ObjectPool 负责持有和计数这个对象。

我建议使用 BasicDataSource。
只是,如果你真的需要一些特别的东西,那么你可以将 PoolingDatasource 与 ObjectPool 的另一个实现一起使用,但这将是非常罕见和具体的。

BasicDataSource 是线程安全的,但您应该注意使用适当的访问器,而不是直接访问 protected 字段以确保线程安全。

关于database-connection - 使用 Apache DBCP 进行连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14467480/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com