使用Apache Commons Pool实现数据库连接池

本文介绍如何利用Apache Commons Pool的GenericObjectPool创建数据库连接池。内容包括对象池的工作原理,如通过PooledObject封装实际对象,以及DbConnectionFactory如何定义对象生命周期。DbConfig和DbPoolConfig分别用于存储数据库配置和池配置,并提供了丰富的定制选项。文章还包含测试代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方示例参考:apache commons pool examples

通过组合Apache Commons Pool提供的GenericObjectPool实现数据库连接池

import org.apache.commons.pool2.PooledObjectFactory;
import org.apache.commons.pool2.impl.GenericObjectPool;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

import java.io.Closeable;
import java.sql.Connection;

public class DbPool implements Closeable {
    private GenericObjectPool<Connection> internalPool;

    public DbPool(GenericObjectPoolConfig poolConfig, PooledObjectFactory factory){
        if (this.internalPool != null) {
            try {
                closeInternalPool();
            } catch (Exception e) {
            }
        }
        this.internalPool = new GenericObjectPool(factory, poolConfig);
    }

    // 获取连接
    public Connection getConnection(){
        Connection connection = null;
        try {
            connection = internalPool.borrowObject();
        } catch (Exception e) {
            throw new RuntimeException("Could not get connection from the pool", e);
        }
        return connection;
    }

    // 返还连接
    public void returnConnection(Connection connection){
        internalPool.returnObject(connection);
    }

    @Override
    public void close(){
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值