java_JDBC连接池HikariCP和DBCP的使用

HikariCP、DBCP数据库连接池详解:

  • 一、 数据库连接池概述
  • 二、为什么需要连接池
  • 三、HikariCP:
    • 1、HikariCP配置文件:
    • 2、HikariCP案例演示:
  • 四、DBCP:
    • 1、DBCP配置文件:
    • 2、DBCP案例演示:

一、 数据库连接池概述

连接池是一种常用的技术,为什么需要连接池呢?
这个需要从TCP说起。假如我们的服务器跟数据库没有部署在同一台机器,那么,服务器每次查询数据库都要先建立连接,一般都是TCP链接,建立连接就需要3次握手了,假设后台服务跟数据库的单程的访问时间需要10ms,那么光是建立连接就花了30ms,并且TCP还有慢启动的机制,实际上一次查询可能还不止1次TCP来回,查询效率就会大大降低。

二、为什么需要连接池

为了解决上述问题,我们就需要维护一些长链接,这样就不用每次都去建立连接,毕竟建立连接除了占用时间,还需要一些其他的系统资源。另外的好处,连接池让我们更加容易地管理,一方面是可以避免数据库资源都被某几个API占据,另一方面也可以避免资源泄露。

三、HikariCP:

HikariCP是由日本程序员开源的一个数据库连接池组件,代码非常轻量,并且速度非常的快。根据官方提供的数据,在i7,开启32个线程32个连接的情况下,进行随机数据库读写操作,HikariCP的速度是现在常用的C3P0数据库连接池的数百倍。在SpringBoot2.0中,官方也是推荐使用HikariCP

要先导入下载好的jar包:

java_JDBC连接池HikariCP和DBCP的使用_第1张图片

1、HikariCP配置文件:

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

2、HikariCP案例演示:

package HikariCP;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.junit.Test;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

public class Demo1 {
    @Test
    public void testHikari() throws IOException, SQLException {
            //1.配置连接池
//            HikariConfig hikariConfig = new HikariConfig();
//            也可以通过properties配置文件配置连接池new HikariConfig(Properties  properties)
            Properties properties = new Properties();
            FileInputStream fileInputStream = new FileInputStream("src\\HikariCP.properties");
            properties.load(fileInputStream);
            HikariConfig hikariConfig = new HikariConfig(properties);
            /*hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306");
            hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
            hikariConfig.setUsername("root");
            hikariConfig.setPassword("SASA");
            hikariConfig.setMaximumPoolSize(30); // 最大连接数
            hikariConfig.setMinimumIdle(10);     // 最小连接数
            hikariConfig.setConnectionTimeout(3000); // 连接超时时间从连接池中获取一个连接最大等待多久时间,单位毫秒*/

            //2.通过配置类生成HikariCP连接池对象
            HikariDataSource dataSource = new HikariDataSource(hikariConfig);
            System.out.println(dataSource.getConnection());

    }

}

运行结果如下就好:

java_JDBC连接池HikariCP和DBCP的使用_第2张图片

四、DBCP:

1、DBCP是Apache提供的数据库连接池,它是一个用于管理数据库连接的工具。它可以帮助我们更有效地使用数据库连接资源,提高数据库访问的性能和效率。

2、DBCP是Tomcat服务器自带的数据库连接池,它相对于C3P0连接池来说速度更快。然而,DBCP自身存在一些BUG,并且Hibernate3已经停止对其提供支持。

3、使用DBCP连接池的好处是可以减少数据库连接的创建和销毁的开销,提高数据库访问的性能。此外,连接池还可以管理连接的数量,避免连接过多导致资源浪费,同时也可以控制连接的超时时间,避免连接长时间占用而不释放。

要先导入下载好的jar包:

java_JDBC连接池HikariCP和DBCP的使用_第3张图片

1、DBCP配置文件:


driverClassName=com.mysql.cj.jdbc.Driver
# 数据库连接URL
url=jdbc:mysql://localhost:3306/qiche1204
# 数据库用户名
username=root
# 数据库密码
password=SASA
initialSize=10
maxActive=30
maxWait=3000

2、DBCP案例演示:

package DBCP;

import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
import org.junit.Test;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Properties;

public class Demo1 {
    @Test
    public void testDBCP() 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);
        // 打印dataSource对象创建的连接
        System.out.println(dataSource.getConnection());
    }

}

运行结果如下就好:

java_JDBC连接池HikariCP和DBCP的使用_第4张图片

你可能感兴趣的:(java,开发语言)