JDBC常见的几种连接池使用(C3P0、Druid、HikariCP 、DBCP)

一、什么是连接池

1、什么是数据库连接池?

数据库连接池(Database Connection Pooling)在程序初始化时创建一定数量的数据库连接对象并将其保存在一块内存区中,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接以避免因为没有释放数据库连接而引起的数据库连接遗漏。

连接池是一种用于管理数据库连接的技术,它具有以下好处:

  • 提高性能:连接池可以重复使用已经建立的数据库连接,避免了每次请求都需要重新建立连接的开销。这样可以减少连接的创建和销毁次数,提高了数据库操作的效率。

  • 节省资源:连接池可以控制同时存在的数据库连接数量,避免了过多的连接占用系统资源,提高了系统的稳定性和可靠性。

  • 提升并发能力:连接池可以管理多个数据库连接,使得多个请求可以同时进行数据库操作,提高了系统的并发能力。

  • 降低系统压力:连接池可以对数据库连接进行管理和监控,可以检测到连接的空闲时间和超时时间,及时释放无用的连接,避免了因为连接过多而导致系统崩溃或性能下降的问题。

  • 提供连接的复用:连接池可以将连接分配给不同的请求,实现连接的复用,减少了连接的创建和销毁的次数,提高了系统的性能和效率。

2、为什么使用数据库连接池?(形象的说就是用了可以放回去给别人用,大家共享)

数据库连接是一种关键、有限且昂贵的资源,创建和释放数据库连接是一个很耗时的操作,频繁地进行这样的操作将占用大量的性能开销,进而导致网站的响应速度下降,严重的时候可能导致服务器崩溃;数据库连接池可以节省系统许多开销。

二、JDBC常见的几种连接池使用

C3P0连接池

jar包下载地址
https://sourceforge.net/projects/c3p0/

解压之后把下面两个jar包添加到库,新版需要添加这两个到库中
在这里插入图片描述
定义C3p0.xml配置文件

<c3p0-config>
    <!--使用默认的配置读取数据库连接池对象 -->
    <default-config>
        <!--  连接参数 -->
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/MovieDB</property>
        <property name="user">root</property>
        <property name="password">123456</property>

        <!-- 连接池参数 -->
        <!--初始化申请的连接数量-->
        <property name="initialPoolSize">5</property>
        <!--最大的连接数量-->
        <property name="maxPoolSize">10</property>
        <!--超时时间-->
        <property name="checkoutTimeout">3000</property>
    </default-config>
</c3p0-config>

测试C3P0

public class Dome{
	public static void main(String [] args) throws SQLException{
		//c3p0的数据源
        ComboPooledDataSource dataSource=new ComboPooledDataSource();
        //连接数据库参数
        Connection connection = dataSource.getConnection();
        ResultSet resultSet = connection.prepareStatement("select count(* )from movie").executeQuery();
        if(resultSet.next()){
            int count=resultSet.getInt(1);
            System.out.println(count);
        }
        resultSet.close();
        connection.close();
	}
}

Druid连接池

德鲁伊jar下载博主使用的是1.2.0版本

https://repo1.maven.org/maven2/com/alibaba/druid/

添加Druid配置文件:

#加载数据库驱动
driverClassName = com.mysql.cj.jdbc.Driver
#数据库连接地址
url = jdbc:mysql://localhost:3306/MovieDB
#数据库用户名
username = root
#数据库密码
password = 123456
#初始化连接数量
initialSize = 10
#最大连接数量
maxActive = 30
#最大超时数1000ms
maxWait = 1000

测试代码:

public class Dome{
	    public void static main(String [] args) throws Exception {
        //加载配置文件
        Properties properties=new Properties();
        properties.load(new FileInputStream("src//jdbc.properties"));
        //在加工厂中创建一个数据源,数据源的连接信息来源于Properties配置文件当中
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
        Connection connection = dataSource.getConnection();
        ResultSet resultSet = connection.prepareStatement("select count(* )from movie").executeQuery();
        if(resultSet.next()){
            int count=resultSet.getInt(1);
            System.out.println(count);
        }
        resultSet.close();
        connection.close();
    }
}

HikariCP连接池

HikariCP Jar包下载地址
https://mvnrepository.com/artifact/com.zaxxer/HikariCP/4.0.3
在这里插入图片描述
使用光连接池需要配置slf4j日志组件1.7.25版本jar包
Maven Repository: org.slf4j » slf4j-api » 1.7.25 (mvnrepository.com)
slf4j-log4j12-1.5.11.jar 下载点击直接下载
在这里插入图片描述
配置文件:

#加载数据库驱动
driverClassName=com.mysql.cj.jdbc.Driver
#数据库连接地址
jdbcUrl=jdbc:mysql://localhost:3306/MovieDB
#数据库用户名
username=root
#数据库密码
password=123456
# 连接池名称
poolName=MyConnectionPool
# 连接池大小
maximumPoolSize=10
# 最小空闲连接数
minimumIdle=5
# 连接超时时间(毫秒)
connectionTimeout=30000
# 空闲连接超时时间(毫秒)
idleTimeout=600000
# 最大生存时间(毫秒)
maxLifetime=1800000

测试代码:

public class Demo{
	 public void static main(String [] args) throws IOException, SQLException {
        Properties properties=new Properties();
        properties.load(new FileInputStream("src//HikariCP.properties"));
        //配置连接池
        HikariConfig hikariConfig=new HikariConfig(properties);
        HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig);
        Connection connection = hikariDataSource.getConnection();
        ResultSet resultSet = connection.prepareStatement("select count(* )from movie").executeQuery();
        if(resultSet.next()){
            int count=resultSet.getInt(1);
            System.out.println(count);
        }
        resultSet.close();
        connection.close();
  	  }
	}
}

DBCP连接池

需要下载两个jar包点击直接下载或者去官网
直接下载https://dlcdn.apache.org//commons/pool/binaries/commons-pool2-2.12.0-bin.zip
直接下载https://dlcdn.apache.org//commons/dbcp/binaries/commons-dbcp2-2.11.0-bin.zip
在这里插入图片描述
在这里插入图片描述
使用过程可能会遇到java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory错误

DBCP需要依赖这个工厂包装类包装日志所以我们还需要下载一个jar包

https://dlcdn.apache.org//commons/logging/binaries/commons-logging-1.3.0-bin.zip 直接下载
在这里插入图片描述
配置文件dbcp.properties

#加载数据库驱动
driverClassName=com.mysql.cj.jdbc.Driver
#数据库连接地址
url=jdbc:mysql://localhost:3306/MovieDB
#数据库用户名
username=root
#数据库密码
password=123456
#初始化连接数量
initialSize=10
#最大连接数
maxActive=30
#最大超时数3000ms
maxWait=3000

代码测试:

public class Demo{
	public static main(String [] args) throws SQLException, IOException {
            // 创建一个Properties对象
            Properties properties = new Properties();
            // 创建一个FileInputStream对象,用于读取src\\dbcp.properties文件
            FileInputStream fileInputStream = new FileInputStream("src\\dbcp.properties");
            // 使用FileInputStream对象读取文件,并将文件内容加载到properties对象中
            properties.load(fileInputStream);
            // 使用properties对象创建一个BasicDataSource对象
            BasicDataSource dataSource = BasicDataSourceFactory.createDataSource(properties);
        Connection connection = dataSource.getConnection();
        ResultSet resultSet = connection.prepareStatement("select count(* )from movie").executeQuery();
        if(resultSet.next()){
            int count=resultSet.getInt(1);
            System.out.println(count);
        }
        resultSet.close();
        connection.close();
   		 }
	}
}

以上便是JDBC常见的几种连接池使用方式了。

⭐最后⭐

🍒欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁
🍒博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言

  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值