常用连接池dbcp (DataBase Connection Pool)

引入依赖:

  1. <!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
  2. <dependency>
  3. <groupId>commons-dbcp</groupId>
  4. <artifactId>commons-dbcp</artifactId>
  5. <version>1.4</version>
  6. </dependency>

配置文件(maven项目)
image.png

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=cy414ljh212,,,

#dbcp参数
#初始化时应该初始化的物理连接数
initialSize=30
#最大激活连接数,当连接数量达到此值,不会再创建连接而是等待其他连接释放
maxActive=30
#最大的空闲连接数(已经创建但未被使用的连接,会被定期回收,最大空闲值就是maxIdle
maxIdle=10
#最小的空闲连接数
minIdle=10
#从连接池中获取连接的最大等待时间,单位ms,如果超过此时间还未获得连接则抛出异常
maxWait=1000

测试demo

package com.duing;

import org.apache.commons.dbcp.BasicDataSourceFactory;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.Properties;

public class DBCPTest {

    //数据源
    private static DataSource dataSource;

    static {
        Properties properties=new Properties();
        try {

            properties.load(DBCPTest.class.getClassLoader()
                    .getResourceAsStream("dbcp.properties"));
            //通过基础数据源工厂类来创建连接池
            dataSource= BasicDataSourceFactory.createDataSource(properties);

            Connection conn=getConn();
            DatabaseMetaData metaData= conn.getMetaData();
            System.out.println("数据库名称"+metaData.getDatabaseProductName());
            System.out.println("数据库版本号"+metaData.getDatabaseProductVersion());

            closeConn(conn);

        } catch (Exception Exception) {
            Exception.printStackTrace();
        }
    }

    //获取连接
    public static Connection getConn() throws SQLException {
        Connection conn=null;
        conn= dataSource.getConnection();
        return conn;
    }

    //关闭连接
    public static void closeConn(Connection conn) throws SQLException {
        if(conn!=null&&conn.isClosed()==false){
            conn.close();
        }
    }

    public static void main(String[] args) throws SQLException {
        for (int i=0;i<10;i++){
            Connection conn=getConn();
            System.out.println("成功获取连接"+i);
            closeConn(conn);
        }
    }

}

运行结果:
image.png

常用连接池c3p0

引入依赖:

<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
    <groupId>com.mchange</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.5.5</version>
</dependency>

配置文件(maven项目)
image.png

<?xml version="1.0" encoding="UTF-8"?>
<!--根标签 和文件名一致-->
<c3p0-config>
    <!--默认配置标签 数据源名字是随机的-->
    <!--    <default-config> -->
    <!--    可以指定名称进行配置,适用于多数据源场景-->
    <named-config name="myC3P0">
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
        <property name="user">root</property>
        <property name="password">cy414ljh212,,,</property>

<!--初始化连接池的连接数量-->
        <property name="initialPoolSize">10</property>
<!--最大可创建连接数-->
        <property name="maxPoolSize">10</property>
<!--最小可连接数-->
        <property name="minPoolSize">2</property>
<!--当没有空闲连接时,一次性创建的新连接数量-->
        <property name="acquireIncrement">2</property>
<!--连接的最大空闲时间,如果一直未使用则断开此连接,如果配置为0代表永远不会断开-->
        <property name="maxIdleTime">0</property>
<!--    </default-config>-->
    </named-config>

</c3p0-config>

测试demo

package com.duing;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.sql.Connection;
import java.sql.SQLException;

public class C3P0Test {

    //数据源
    private static ComboPooledDataSource dataSource;
    static {
        //将指定配置文件(c3p0-config.xml)中的指定标签内容加载进来
        //无参构造时会读取默认配置,有参构造时读取指定名称的配置
        dataSource=new ComboPooledDataSource("myC3P0");
        System.out.println("数据源名字"+dataSource.getDataSourceName());
    }

    //获取连接
    public static Connection getConn() throws SQLException {
        return dataSource.getConnection();
    }

    //关闭连接
    public static void closeConn(Connection conn) throws SQLException {
        if(conn!=null&&!conn.isClosed()){
            conn.close();
        }
    }

    public static void main(String[] args) throws SQLException {
        Connection connection=getConn();
        System.out.println("成功获取连接");
        closeConn(connection);
    }

}

运行结果:
image.png

常用连接池druid

引入依赖:

<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.21</version>
</dependency>

配置文件(maven项目)
image.png

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=cy414ljh212,,,

#初始化大小
initialSize=5
#最大激活连接数
maxActive=20
#最小的空闲连接数
minIdle=10
#从连接池中获取连接的最大等待时间
maxWait=1000
#间隔多长时间,检测是否关闭空闲连接,单位为毫秒
timeBetweenEvictionRunsMillis=2000
#控制一个连接在资源池中,最大或最小的生存时间,单位也是毫秒
minEvictableIdleTimeMillis=600000
maxEvictableIdleTimeMillis=900000

测试demo

package com.duing;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.commons.dbcp.BasicDataSourceFactory;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.Properties;

public class DruidTest {

    private static DataSource dataSource;

    static {
        Properties properties=new Properties();
        try {

            properties.load(DBCPTest.class.getClassLoader()
                    .getResourceAsStream("druid.properties"));
            //通过基础数据源工厂类来创建连接池
            dataSource= DruidDataSourceFactory.createDataSource(properties);

            Connection conn=getConn();
            DatabaseMetaData metaData= conn.getMetaData();
            System.out.println("数据库名称"+metaData.getDatabaseProductName());
            System.out.println("数据库版本号"+metaData.getDatabaseProductVersion());

            closeConn(conn);

        } catch (Exception Exception) {
            Exception.printStackTrace();
        }
    }

    public static Connection getConn() throws SQLException {
        Connection conn=null;
        conn= dataSource.getConnection();
        return conn;
    }

    public static void closeConn(Connection conn) throws SQLException {
        if(conn!=null&&conn.isClosed()==false){
            conn.close();
        }
    }

    public static void main(String[] args) throws SQLException {
        for (int i=0;i<10;i++){
            Connection conn=getConn();
            System.out.println("成功获取连接"+i);
            closeConn(conn);
        }
    }
}

运行结果:
image.png