HikariCP连接池

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

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

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

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

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

2、HikariCP简介

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

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

3.1 添加依赖pom.xml

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工具类

java 复制代码
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 文件,然后在代码中加载它:

java 复制代码
# 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
java 复制代码
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();
        }
    }
}
相关推荐
PaperData7 小时前
1985-2025年全国区县专利申请与授权面板数据
数据库
snpgroupcn8 小时前
大数据量SAP迁移方案:系统越大,越不能硬搬
数据库·sap
leikooo8 小时前
用餐厅和盘子理解栈和堆
java·数据结构·链表·rust
Flynt9 小时前
Redis Cluster主节点挂了,为什么"高可用"还全员掉线?我把三次kill的记录翻出来了
数据库·redis·分布式
笃行3509 小时前
KingbaseES 数据加密全解:从 SSL 到全密态
数据库
Ivanqhz9 小时前
激活函数在 Transformer 中的作用及各种变体简述
java·linux·数据库·人工智能·深度学习
沙漠之主9 小时前
C++编程教学设计资料:从入门到实战的完整课程方案
java·前端·c++
FPGA小徐10 小时前
PA1 基础设施(2)深度解析:NEMU 中 ITRACE、MTRACE、FTRACE、IRINGBUF、ETRACE、DIFFTEST 全解析
java·服务器·网络
YOLO数据集集合10 小时前
EvoAgent:面向PR研发治理的自进化Multi-Agent Harness系统
java·开发语言·目标检测·agent·自进化
java1234_小锋10 小时前
【技术专题】Mysql8 数据库 - Mysql8 数据类型简介
数据库·mysql