DBCP数据池的properties文件详细配置以及简单的实现(连接mysql)

DBCP(DataBase connection pool)是 apache 上的一个 java 连接池项目,也是 tomcat 默认使用的连接池组件,所以还是相当重要的,有必要学习一下。

准备工作,建立DBCP数据库连接池需要先导入四个包

commons-dbcp2-2.1.1.jar,commons-pool2-2.4.2.jar,commons-logging-1.2.jar,mysql-connector-java-5.1.45.jar

包导好之后,便是properties文件的配置,下边给出了配置的详细属性

driverClassName=com.mysql.jdbc.Driver  // 不多解释,这是基本的驱动加载

url=jdbc:mysql://localhost/db_student    // 驱动注册

username=root    //要连接的数据库用户名

password=root   // 要连接的数据库密码

defaultAutoCommit=true:// 设置是否自动提交,默认为true

defaultReadOnly=false: // 是否为只读 默认为false

defaultTransactionIsolation=3:// 设置数据库的事务隔离级别默认为1,READ_UNCOMMITTED,推荐设置为3

initialSize=10:  // 初始化数据池拥有的连接数量

maxActive=20:  /池中最多可容纳的活着的连接数量,当达到这个数量不在创建连接

maxIdle=20:  // 最大空闲等待,也就是连接等待队列超过这个值会自动回收未使用的连接,直到达到20

minIdle=5: // 最小空闲等待 ,数据池中最少保持的连接

maxWait=10000   // 最大等待时间,超过这个时间等待队列中的连接就会失效

testOnBorrow=true  //从池中取出连接时完成校验 ,验证不通过销毁这个connection,默认为true,

testOnReturn=false  //放入池中时完成校验,默认我fasle

validationQuery=select 1  // 校验语句,必须是查询语句,至少查询一列,设置了它onBorrow才会生效

validationQueryTimeout=1  // 校验查询时长,如果超过,认为校验失败

testWhileIdle=false   // 清除一个连接时是否需要校验

timeBetweenEvictionRunsMillis=1  // DBCP默认有个回收器Eviction,这个为设置他的回收时间周期

numTestsPerEvictionRun=3  // Eviction在运行时一次处理几个连接

poolPreparedStatements=true  //是否缓存PreparedStatements

maxOpenPreparedStatements=1 // 缓存PreparedStatements的最大个数

文件配置好之后,就可以新建连接池了,有两种方式,先介绍软编码使用连接池

import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Properties;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;

public class Mydbcp {
    
    // 声明一个DataSource源,也就是驱动
    static BasicDataSource bs = null; 
    // properties集合,读取properties文件
    static Properties properties = new Properties(); 
    
    static {
        
        // 用类加载器加载文件获得流
        InputStream rs = Mydbcp.class.getClassLoader().getResourceAsStream("dbcp.properties");
        try {
            // 加载文件配置内容到集合中
            properties.load(rs);
            // 通过basic工厂获得DataSource源,也就是驱动,相当于注册
            bs = BasicDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
       
        try {
            // 来个for循环测试配置是否正确
            for (int i = 0; i < 50; i++) {
                // 从数据池中取出连接
                Connection connection = bs.getConnection();
//                System.out.println(bs.getMaxTotal());
                // 使用完毕将连接放回数据池(这里是代理过的close方法,并不是JDBC原生的close)
                connection.close();
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    
}

硬编码使用连接池

这种方法比较麻烦,需要一步一步的设置配置,远不如properties配置文件方便,而且耦合还高,不推荐使用

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


public class Mydbcp {
    // 声明DBCP
    static BasicDataSource bds = new BasicDataSource();
    
    static {
        // 一步一步设置配置,根据需求自主设置,只需set对应的属性就可以
        bds.setDriverClassName("com.mysql.jdbc.Driver");
        bds.setUrl("jdbc:mysql://localhost/db_student");
        bds.setUsername("root");
        bds.setPassword("root");
        
        bds.setInitialSize(5);
        bds.setMaxTotal(20);
        bds.setMaxIdle(20);
        bds.setMinIdle(5);
        bds.setMaxWaitMillis(10000);
    }
    
    public static void main(String[] args) {
        try {
            // for循环测试连接是否成功
            for(int i = 0; i < 50; i++) {
                Connection conn = bds.getConnection();
                System.out.println(conn.hashCode()+ "...." + i);
                conn.close();
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

一些常见的问题:配置properties文件时需要注意,属性值不能用双引号括起来,每一行不需要加分号,每行不能有多语的空格,还有properties要放在src目录下。

正确示范

错误示范

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用DBCP连接池需要在配置文件中设置以下属性: 1. 驱动类名(driverClassName):数据库驱动程序的名称,例如com.mysql.jdbc.Driver。 2. 数据连接URL(url):连接数据库的URL,例如jdbc:mysql://localhost:3306/test。 3. 数据库用户名(username):连接数据库所需的用户名。 4. 数据库密码(password):连接数据库所需的密码。 5. 初始连接数(initialSize):连接池在启动时创建的初始连接数。 6. 最小空闲连接数(minIdle):连接池中保留的最小空闲连接数。 7. 最大活动连接数(maxActive):连接池中同时可分配的最大活动连接数。 8. 最大等待时间(maxWait):等待连接池分配连接的最长时间(以毫秒为单位)。 9. 连接池名(poolName):连接池的名称。 下面是一个示例配置文件: ```xml <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test" /> <property name="username" value="root" /> <property name="password" value="password" /> <property name="initialSize" value="5" /> <property name="minIdle" value="2" /> <property name="maxActive" value="20" /> <property name="maxWait" value="10000" /> <property name="poolPreparedStatements" value="true" /> <property name="maxOpenPreparedStatements" value="100" /> <property name="poolName" value="MyDBCP" /> </bean> ``` 在上面的配置中,我们使用了org.apache.commons.dbcp.BasicDataSource类,它是DBCP连接池实现类。我们设置了MySQL数据库的驱动程序名称、URL、用户名和密码。我们还设置了连接池的一些属性,例如初始连接数、最小空闲连接数、最大活动连接数和最大等待时间。最后,我们指定了连接池的名称为MyDBCP
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值