JAVA使用DBCP2(数据库连接池)

本文介绍了DBCP2数据库连接池的使用。首先说明了准备工作,需下载相关jar包。接着阐述了不使用配置文件,直接通过代码设置数据源参数,以及使用配置文件设置数据源参数的方法。最后对DBCP读取properties文件路径的两种写法进行了说明。

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

参考:https://www.cnblogs.com/xdp-gacl/p/4002804.html
https://blog.youkuaiyun.com/zxh707wk/article/details/54237332
https://blog.youkuaiyun.com/icanlove/article/details/44097839

一.准备工作

需要下载commons-dbcp2-2.4.0.jar 和 commons-pool2-2.5.0.jar

二.DBCP2数据库连接池工具类

不使用配置文件,直接通过代码设置数据源参数

import org.apache.commons.dbcp2.BasicDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SqlPoolUtil {

    private static BasicDataSource dataSource = new BasicDataSource();
    //配置数据源
    static
    {
        DataSourceConfig();
    }

    //以代码形式,设置数据源各属性值
    private static void DataSourceConfig(){
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUsername("root");
        dataSource.setPassword("******");
        dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/数据库名?useUnicode=true&characterEncoding=utf-8&useSSL=false");
        dataSource.setInitialSize(20);
        dataSource.setMaxTotal(80);
        dataSource.setMaxIdle(40);
        dataSource.setMinIdle(20);
        dataSource.setMaxWaitMillis(6000);
    }

    //获得连接对象
    public static Connection getConn(){
        Connection conn = null;
        try{
            conn = dataSource.getConnection();
        }catch (SQLException e){
            e.printStackTrace();
        }
        return conn;
    }

    public static void release(Connection conn, Statement st, ResultSet rs){
        if (rs!=null){
            try {
                //关闭存储查询结果的ResultSet对象
                rs.close();
            }catch (Exception e){
                e.printStackTrace();
            }
            rs = null;
        }
        if (st!=null){
            try {
                st.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        if (conn!=null){
            try {
                //将Connection连接对象还给数据库连接池
                conn.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

三.DBCP使用配置文件设置数据源参数

需要下载Commons-dbcp.jar和Commons-pool.jar
1.配置文件dbcpconfig.properties

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/Dandelion?useUnicode=true&characterEncoding=utf-8&useSSL=false&useServerPrepStmts=true&cachePrepStmts=true
username=root
password=******
initialSize=10
maxActive=50
maxIdle=20
minIdle=5
maxWait=30000
connectionProperties=useUnicode=true;characterEncoding=UTF8
defaultAutoCommit=true
defaultTransactionIsolation=READ_UNCOMMITTED

2.读取数据源配置的JAVA代码

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

/**
 * @ClassName:JdbcUtil
 * @Description:数据库连接工具类
 */
public class JdbcUtil {
    //数据库连接池需实现javax.sql.DataSource接口,DBCP连接池是javax.sql.DataSource接口的具体实现
    private static DataSource ds = new BasicDataSource();
    //使用静态代码块创建数据库连接池
    static{
        try{
            //加载dbcpconfig.properties配置文件
            InputStream in = JdbcUtil.class.getClassLoader().getResourceAsStream("/src/dbcpconfig.properties");
            Properties prop = new Properties();
            prop.load(in);
            log.info(prop.getProperty("password"));
            log.info("开始创建数据源");
            //创建数据源
            ds = BasicDataSourceFactory.createDataSource(prop);
        }catch (Exception e){
            throw new ExceptionInInitializerError(e);
        }
    }

    /**
     * @Method:getConnection
     * @Description:从数据源中获取数据库连接
     * @return
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException{
        //从数据源中获取数据库连接
        return ds.getConnection();
    }

    /**
     * @Method:release
     * @Description:释放资源(数据库连接对象conn,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象)
     * @param conn
     * @param st
     * @param rs
     */
    public static void release(Connection conn, Statement st, ResultSet rs){
        if (rs!=null){
            try {
                //关闭存储查询结果的ResultSet对象
                rs.close();
            }catch (Exception e){
                e.printStackTrace();
            }
            rs = null;
        }
        if (st!=null){
            try {
                st.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        if (conn!=null){
            try {
                //将Connection连接对象还给数据库连接池
                conn.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

四.关于DBCP读取properties文件路径的说明

JAVA的Class.getClassLoader.getResourceAsStream(String path)中的path有带“/"和不带“/"两种写法

第一种:前面有 “ / ”
“ / ”代表了工程的根目录,例如工程名叫做myproject,“ / ”代表了myproject
me.class.getResourceAsStream("/com/x/file/myfile.xml");

第二种:前面没有 “ / ”
代表当前类的目录
me.class.getResourceAsStream("myfile.xml");
me.class.getResourceAsStream("file/myfile.xml");



作者:莫小归
链接:https://www.jianshu.com/p/a1061eb40826
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值