当前位置: 首页 > news >正文

Hutool - DB 连接池配置集成

在实际开发中,尤其是在高并发场景下,使用连接池来管理数据库连接是非常必要的,它可以显著提高数据库操作的性能和效率。Hutool - DB 支持集成多种常见的连接池,如 HikariCP、Druid 等。下面分别介绍如何将这两种连接池集成到 Hutool - DB 中。

集成 HikariCP 连接池

1. 添加依赖

如果你使用 Maven 项目,在 pom.xml 中添加 HikariCP 的依赖:

<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>5.0.0</version>
</dependency>

若使用 Gradle 项目,在 build.gradle 中添加:

implementation 'com.zaxxer:HikariCP:5.0.0'
2. 配置 db.setting 文件

resources 目录下的 db.setting 文件中,配置 HikariCP 连接池相关信息,示例如下:

[main]
url = jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
user = root
pass = 123456
pool = hikari
# HikariCP 连接池配置
hikari.minimumIdle = 5
hikari.maximumPoolSize = 20
hikari.idleTimeout = 30000
hikari.poolName = MyHikariCP
hikari.maxLifetime = 1800000
hikari.connectionTimeout = 30000
  • pool = hikari:指定使用 HikariCP 连接池。
  • hikari.minimumIdle:最小空闲连接数。
  • hikari.maximumPoolSize:最大连接数。
  • hikari.idleTimeout:连接空闲超时时间(毫秒)。
  • hikari.poolName:连接池名称。
  • hikari.maxLifetime:连接的最大生命周期(毫秒)。
  • hikari.connectionTimeout:获取连接的超时时间(毫秒)。
3. 代码示例

以下是一个简单的使用 HikariCP 连接池进行数据库查询的代码示例:

import cn.hutool.db.Db;
import cn.hutool.db.Entity;
import java.sql.SQLException;
import java.util.List;

public class HikariCPExample {
    public static void main(String[] args) {
        try {
            // 查询所有用户
            List<Entity> userEntities = Db.use().query("SELECT * FROM user");
            for (Entity entity : userEntities) {
                System.out.println("ID: " + entity.get("id") + ", Name: " + entity.get("name"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

集成 Druid 连接池

1. 添加依赖

如果你使用 Maven 项目,在 pom.xml 中添加 Druid 的依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.11</version>
</dependency>

若使用 Gradle 项目,在 build.gradle 中添加:

implementation 'com.alibaba:druid:1.2.11'
2. 配置 db.setting 文件

resources 目录下的 db.setting 文件中,配置 Druid 连接池相关信息,示例如下:

[main]
url = jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
user = root
pass = 123456
pool = druid
# Druid 连接池配置
druid.initialSize = 5
druid.minIdle = 5
druid.maxActive = 20
druid.maxWait = 60000
druid.timeBetweenEvictionRunsMillis = 60000
druid.minEvictableIdleTimeMillis = 300000
druid.validationQuery = SELECT 1
druid.testWhileIdle = true
druid.testOnBorrow = false
druid.testOnReturn = false
druid.poolPreparedStatements = true
druid.maxPoolPreparedStatementPerConnectionSize = 20
  • pool = druid:指定使用 Druid 连接池。
  • druid.initialSize:初始化连接数。
  • druid.minIdle:最小空闲连接数。
  • druid.maxActive:最大连接数。
  • druid.maxWait:获取连接的最大等待时间(毫秒)。
  • druid.timeBetweenEvictionRunsMillis:空闲连接回收的检测周期(毫秒)。
  • druid.minEvictableIdleTimeMillis:连接的最小空闲时间(毫秒)。
  • druid.validationQuery:用于检测连接是否有效的 SQL 语句。
  • druid.testWhileIdle:是否在连接空闲时进行有效性检测。
  • druid.testOnBorrow:是否在获取连接时进行有效性检测。
  • druid.testOnReturn:是否在归还连接时进行有效性检测。
  • druid.poolPreparedStatements:是否缓存 PreparedStatement。
  • druid.maxPoolPreparedStatementPerConnectionSize:每个连接缓存的 PreparedStatement 最大数量。
3. 代码示例

以下是一个使用 Druid 连接池进行数据库插入操作的代码示例:

import cn.hutool.db.Db;
import cn.hutool.db.Entity;
import java.sql.SQLException;

public class DruidExample {
    public static void main(String[] args) {
        try {
            // 插入新用户
            Db.use().insert(Entity.create("user").set("name", "Tom").set("age", 28));
            System.out.println("新用户插入成功!");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

注意事项

  • 连接池配置调优:不同的连接池配置参数会影响连接池的性能,需要根据实际的业务场景和数据库性能进行合理的调优。例如,在高并发场景下,可能需要适当增大最大连接数;在低并发场景下,可以减小最小空闲连接数以节省资源。
  • 异常处理:在使用连接池进行数据库操作时,仍然可能会出现各种异常,如连接超时、数据库服务器故障等。在代码中要进行适当的异常处理,确保程序的健壮性。
  • 版本兼容性:确保所使用的连接池版本与 Hutool 以及其他依赖库的版本兼容,避免出现版本冲突导致的问题。

通过集成连接池,Hutool - DB 可以更好地应对高并发场景,提高数据库操作的性能和稳定性。

相关文章:

  • JUC并发总结二
  • WEB前端将指定DOM生成图片并下载最佳实践(html2canvas)
  • 跟着AI学vue第六章
  • 以ChatGPT为例解析大模型背后的技术
  • Nginx 请求超时
  • uniapp中引入Vant Weapp的保姆级教学(包含错误处理)
  • CV -- 基于GPU版CUDA环境+Pycharm YOLOv8 目标检测
  • 将Google文档导入WordPress:简单实用的几种方法
  • Linux的指令与热键
  • 《动手学机器人学》笔记
  • 软件著作权申请流程详解:从准备到登记的完整指南
  • MAC快速本地部署Deepseek (win也可以)
  • 【Elasticsearch】如何获取一致的评分
  • 装修流程图: 装修前准备 → 设计阶段 → 施工阶段 → 安装阶段 → 收尾阶段 → 入住
  • 小米路由器 AX3000T 降级后无法正常使用,解决办法
  • Linux基本指令(二)
  • QML double浮点数取小数点后某几位【去尾法】
  • 【Linux基础八】计算机体系结构(冯诺依曼和操作系统)
  • 【嵌入式常用工具】Srecord使用
  • 探索显著性检测中语义信息的高效模型
  • 手机网站 微信/做竞价托管的公司
  • 网站建设制作设计/百度指数是怎么计算的
  • 做电商网站需要会些什么条件/2022百度收录越来越难了
  • 怎么做类似豆瓣的网站/上海seo公司排名榜
  • 网站添加属性/新网站多久会被百度收录
  • 用asp做网站span/国内快速建站