HikariCP连接池

10 阅读2分钟

1、为什么要使用连接池?

  • 传统JDCBC手动连接管理,每次操作都创建连接,频繁创建/关闭连接消耗资源。

  • 每次获取连接都要经过TCP三次握手、认证等,开销大。

  • 连接池预先创建一批连接,使用时从池中获取,用完归还,避免重复创建。

  • HikariCP 的设计目标是尽可能减少开销,从而提高性能。

2、HikariCP简介

HikariCP 是目前性能最好的Java数据库连接池,是轻量级的 JDBC 连接池,旨在提供快速和高效的数据库连接管理。

3、HikariCP连接池使用(maven项目)

3.1 添加依赖pom.xml

<!-- HikariCP依赖 -->
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>5.0.1</version>
</dependency>

<!-- MySQL驱动(根据你的数据库选择) -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>

3.2 创建HikariCP工具类

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class HikariCPUtil {
    public static void main(String[] args){
        //1.创建HikariCP配置
        HikariConfig config = new HikariConfig();

        //2.配置数据库连接参数
        config.setJdbcUrl("jdbc:mysql://localhost:3306/test_db");
        config.setUsername("root");
        config.setPassword("123456");

        //3.配置连接池参数(连接池大小)
        config.setMaximumPoolSize(20);      // 最大连接数,默认10
        config.setMinimumIdle(10);          // 最小空闲连接数,默认等于maximumPoolSize
        config.setConnectionTimeout(30000); // 获取连接超时时间(毫秒),默认30000(30秒)
        config.setIdleTimeout(600000);      // 连接空闲超时(毫秒),默认600000(10分钟)
        config.setMaxLifetime(1800000);     // 连接最大生命周期(毫秒),默认1800000(30分钟)

        config.setConnectionTestQuery("SELECT 1"); //测试连接是否有效

        //4.创建数据源
        HikariDataSource dataSource = new HikariDataSource(config);

        //5.获取连接并使用
        try {
            Connection conn = dataSource.getConnection();
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT 1");

            if(rs.next()){
                System.out.println("连接成功!测试结果: " + rs.getInt(1));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //6.关闭连接池
            dataSource.close();
        }
    }
}

3.3 配置文件方式

可以创建一个 hikari.properties 文件,然后在代码中加载它:

# hikari.properties
jdbcUrl=jdbc:mysql://localhost:3306/test_db
username=your_username
password=your_password
maximumPoolSize=10
minimumIdle=2
idleTimeout=30000
connectionTimeout=30000
maxLifetime=1800000
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class HikariCPUtil {
    public static void main(String[] args){
        //1.创建HikariCP配置,并加载配置文件
        HikariConfig config = new HikariConfig("path/to/hikari.properties");

        //2.创建数据源
        HikariDataSource dataSource = new HikariDataSource(config);

        //3.获取连接并使用
        try {
            Connection conn = dataSource.getConnection();
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT 1");

            if(rs.next()){
                System.out.println("连接成功!测试结果: " + rs.getInt(1));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //4.关闭连接池
            dataSource.close();
        }
    }
}