当前位置: 首页 > 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 可以更好地应对高并发场景,提高数据库操作的性能和稳定性。

相关文章:

Hutool - DB 连接池配置集成

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

激光工控机在自动化生产线中有什么关键作用?

激光工控机作为自动化生产线的核心设备&#xff0c;通过高精度控制、快速响应和智能化集成&#xff0c;在提升效率、保障质量、实现柔性制造等方面发挥着不可替代的作用。以下是其关键作用的具体分析&#xff1a; 一、实现高效连续生产&#xff1a; 1.高速加工能力&#xff1…...

Visual Studio Code的下载安装与汉化

1.下载安装 Visual Studio Code的下载安装十分简单&#xff0c;在本电脑的应用商店直接下载安装----注意这是社区版-----一般社区版就足够用了---另外注意更改安装地址 2.下载插件 重启后就是中文版本了...

nlp|微调大语言模型初探索(3),qlora微调deepseek记录

前言 上篇文章记录了使用lora微调llama-1b,微调成功,但是微调llama-8b显存爆炸,这次尝试使用qlora来尝试微调参数体量更大的大语言模型,看看64G显存的极限在哪里。 1.Why QLora? QLoRA 在模型加载阶段通过 4-bit 量化大幅减少了模型权重的显存占用。QLoRA 通过 反量化到 …...

【全栈】SprintBoot+vue3迷你商城-细节解析(1):Token、Jwt令牌、Redis、ThreadLocal变量

【全栈】SprintBootvue3迷你商城-细节解析&#xff08;1&#xff09;&#xff1a;Token、Jwt令牌、Redis、ThreadLocal变量 往期的文章都在这里啦&#xff0c;大家有兴趣可以看一下 后端部分&#xff1a; 【全栈】SprintBootvue3迷你商城&#xff08;1&#xff09; 【全栈】…...

基于ffmpeg+openGL ES实现的视频编辑工具(一)

在深入钻研音视频编辑开发这片技术海洋时&#xff0c;相信不少开发者都和我有同样的感受&#xff1a;网络上关于音视频编辑工具实现的资料繁多&#xff0c;理论阐释细致入微&#xff0c;代码片段也随处可见。然而&#xff0c;一个显著的缺憾是&#xff0c;缺乏一个完整成型的 A…...

面试完整回答:SQL 分页查询中 limit 500000,10和 limit 10 速度一样快吗?

首先&#xff1a;在 SQL 分页查询中&#xff0c;LIMIT 500000, 10 和 LIMIT 10 的速度不会一样快&#xff0c;以下是原因和优化建议&#xff1a; 性能差异的原因 LIMIT 10&#xff1a; 只需要扫描前 10 条记录&#xff0c;然后返回结果。 性能非常高&#xff0c;因为数据库只…...

Linux系统管理(十六)——通过WSL配置windows下的Linux系统(可视化界面与远程连接)

前言 WSL&#xff0c;即Windows Subsystem for Linux&#xff0c;是微软在Windows 10和Windows 11中引入的功能&#xff0c;允许用户在Windows上原生运行Linux的命令行工具和应用程序&#xff0c;无需启动完整的Linux虚拟机或进行双系统启动。 开启WSL服务 开启虚拟化 进入…...

【RabbitMQ业务幂等设计】RabbitMQ消息是幂等的吗?

在分布式系统中&#xff0c;RabbitMQ 自身不直接提供消息幂等性保障机制&#xff0c;但可通过业务逻辑设计和技术组合实现消息处理的幂等性。以下是 8 种核心实现方案及最佳实践&#xff1a; 一、消息唯一标识符 (Message Deduplication) 原理 每条消息携带全局唯一ID&#xff…...

flutter在安卓模拟器上运行

目录 下载android studio&#xff0c;然后把其中的模拟器设为环境变量&#xff0c;然后在vscode/cursor中使用插件&#xff0c;打开安卓模拟器一、下载android studio网址mac 下载64位 ARM 二、启动android studio三、设置SDK四、打开文件 打开模拟器五、运行程序六、在vscode/…...

linux shell 当命令执行出现错误立即退出的方法

在 Linux 脚本中&#xff0c;如果你想在整个脚本执行完毕后检查是否有错误发生&#xff0c;可以通过以下几种方式实现&#xff1a; 1. 使用 $? 检查上一条命令的退出状态 每个命令执行后&#xff0c;Shell 会将其退出状态存储在特殊变量 $? 中。$? 的值为 0 表示成功&#…...

与本地电脑PDF文档对话的PDF问答程序

文章目录 PDF问答程序程序流程处理PDF文档创建问答链 在探索和学习新技术时&#xff0c;了解LangChain框架的理论知识固然重要&#xff0c;但实际的案例分析与实践尝试能为你提供更加直观的认识和更深人的理解。本文主要以解析案例代码为主。通过具体的实践操作&#xff0c;你可…...

QT之改变鼠标样式

QT改变鼠标图片 资源路径如下 代码实现 QPixmap customCursorPixmap(":/images/mouse.png");QCursor customCursor(customCursorPixmap);QWidget::setCursor(customCursor); // 可以设置为整个窗口或特定控件QWidget::setCursor(); // 设置为透明光标&#xff0c…...

后端开发:开启技术世界的新大门

在互联网的广阔天地中&#xff0c;后端开发宛如一座大厦的基石&#xff0c;虽不直接与用户 “面对面” 交流&#xff0c;却默默地支撑着整个互联网产品的稳定运行。它是服务器端编程的核心领域&#xff0c;负责处理数据、执行业务逻辑以及与数据库和其他后端服务进行交互。在当…...

Sun-Panel:简洁且美观的导航首页开源项目!!

在这个数字化飞速发展的时代&#xff0c;我们几乎每个人都拥有自己的服务器或者NAS。但问题来了&#xff0c;管理这些设备往往需要记住一大堆复杂的命令和界面&#xff0c;对于像了不起这样追求简洁生活的程序员来说&#xff0c;简直是噩梦&#xff01; 今天介绍一款界面清爽&…...

第4章 信息系统架构(四)

4.6 网络架构 网络是信息技术架构中的基础&#xff0c;不仅是用户请求和获取IT信息资源服务的通道&#xff0c;同时也是 信息系统架构中各类资源融合和调度的枢纽。特别是云计算、大数据和移动互联网技术飞速发 展的今天&#xff0c;网络更加成为实现这些技术跨越的重要环节。…...

【Java八股文】07-Redis面试篇

【Java八股文】07-Redis面试篇 Redis面试篇认识redis为什么用 Redis 作为 MySQL 的缓存&#xff1f; 数据结构讲一下Redis底层的数据结构ZSet底层是由什么实现的 线程模型Redis 是单线程吗&#xff1f;Redis怎么进行I/O多路复用的&#xff1f;Redis 采用单线程为什么还这么快&a…...

Windows PyCharm的python项目移动存储位置后需要做的变更

项目使用的venv虚拟环境&#xff0c;因此项目移动存储位置后需要重新配置python解释器的位置&#xff0c;否则无法识别&#xff0c;若非虚拟环境中运行&#xff0c;则直接移动后打开即可&#xff0c;无需任何配置。 PyCharm版本为2021.3.3 (Professional Edition)&#xff0c;其…...

微信小程序消息推送解密

package com.test.main.b2b;import org.apache.commons.codec.binary.Base64;import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.util.Arrays;/*** author * version 1.0* description: 解谜微信小…...

《道德经的现代智慧:解码生活与商业的底层逻辑2》

第二章&#xff1a;人际互动的智慧 &#x1f91d; 引言&#xff1a;现代人际关系的困境 &#x1f31f; 时代背景&#xff1a;超连接时代的人际迷思 &#x1f310; 在这个前所未有的超连接时代&#xff0c;我们似乎比任何时候都更"在线"、更"联系"&#…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...