commons-dbcp连接池的使用

数据库连接池
    
    池参数(所有池参数都有默认值):
    初始大小:10
    最小空闲连接数:3
    增量:一次创建的最小单位(5个)
    最大空闲连接数:12个
    最大连接数:20个
    最大的等待时间:1000毫秒
    
    四大连接参数:
    连接池也是使用4大连接参数来完成连接的创建连接对象
    
    实现的接口:
    连接池必须实现:javax.sql.DataSource接口
    
    连接池返回的Connection对象,它的close方法与众不同,调用它的close不是关闭而是将连接归还给池

需要jar:

  

package cn.itcast.jdbc;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;

import org.apache.commons.dbcp.BasicDataSource;
import org.junit.Test;

/**
 * DBCP连接池
 * @author Administrator
 *
 */
/*
      接口 DataSource
      DataSource 接口由驱动程序供应商实现。共有三种类型的实现: 
    基本实现 - 生成标准的 Connection 对象 
    连接池实现 - 生成自动参与连接池的 Connection 对象。此实现与中间层连接池管理器一起使用。 
    分布式事务实现 - 生成一个 Connection 对象,该对象可用于分布式事务,大多数情况下总是参与连接池。此实现与中间层事务管理器一起使用,大多数情况下总是与连接池管理器一起使用。 
     Connection getConnection() 
              尝试建立与此 DataSource 对象所表示的数据源的连接。 
     Connection getConnection(String username, String password) 
              尝试建立与此 DataSource 对象所表示的数据源的连接。 

 */
public class Demo1 {
    
    @Test
    public void fun1() throws SQLException{
        /*
         * 1、创建连接池对象
         * 2、配置4大参数
         * 3、配置池参数
         * 4、得到连接对象
         */
        
        BasicDataSource dataSource=new BasicDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/demo");
        dataSource.setUsername("guodaxia");
        dataSource.setPassword("961012gz");
        
        dataSource.setMaxActive(20);
        dataSource.setMinIdle(3);
        dataSource.setMaxWait(1000);
        
        Connection con=dataSource.getConnection();
        Connection con1=new MyConnection(con);
        System.out.println(con1.getClass().getName());
        //org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 装饰者模式
        
        /**
         * 连接池内部使用四大参数创建了连接对象,即mysql驱动提供的Connection
         * 连接池使用mysql的连接对象进行了装饰,只对close方法进行了增强
         * 装饰之后的Connection的close方法用来把当前连接归还给池
         */
        con1.close();//把连接归还给池
    }
}
原文地址:https://www.cnblogs.com/aigeileshei/p/5714047.html