Spring Boot实战 | 如何整合高性能数据库连接池HikariCP
专栏集锦,大佬们可以收藏以备不时之需
Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html
Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html
Logback 详解专栏:https://blog.csdn.net/superdangbo/category_9271502.html
tensorflow专栏:https://blog.csdn.net/superdangbo/category_8691332.html
Redis专栏:https://blog.csdn.net/superdangbo/category_9950790.html
1024程序员节特辑文章:
1024程序员狂欢节特辑 | ELK+ 协同过滤算法构建个性化推荐引擎,智能实现“千人千面”
1024程序员节特辑 | 解密Spring Cloud Hystrix熔断提高系统的可用性和容错能力
1024程序员节特辑 | ELK+ 用户画像构建个性化推荐引擎,智能实现“千人千面”
1024程序员节特辑 | OKR VS KPI谁更合适?
1024程序员节特辑 | Spring Boot实战 之 MongoDB分片或复制集操作
Spring实战系列文章:
Spring实战 | Spring AOP核心秘笈之葵花宝典
Spring实战 | Spring IOC不能说的秘密?
国庆中秋特辑系列文章:
国庆中秋特辑(八)Spring Boot项目如何使用JPA
国庆中秋特辑(七)Java软件工程师常见20道编程面试题
国庆中秋特辑(六)大学生常见30道宝藏编程面试题
国庆中秋特辑(五)MySQL如何性能调优?下篇
国庆中秋特辑(四)MySQL如何性能调优?上篇
国庆中秋特辑(三)使用生成对抗网络(GAN)生成具有节日氛围的画作,深度学习框架 TensorFlow 和 Keras 来实现
国庆中秋特辑(二)浪漫祝福方式 使用生成对抗网络(GAN)生成具有节日氛围的画作
国庆中秋特辑(一)浪漫祝福方式 用循环神经网络(RNN)或长短时记忆网络(LSTM)生成祝福诗词
目录
- 1、HikariCP发展背景和适用场景
- 2、HikariCP特点
- 3、HikariCP参数说明
- 4、Spring Boot整合HikariCP实战
- 5、HikariCP和其他数据库连接池对比
- 6、HikariCP常见问题汇总

1、HikariCP发展背景和适用场景
HikariCP 是一款高性能的数据库连接池,由 derby 项目的创始人兼首席开发人员山姆·柯曼(Sam Covey)开发。HikariCP 的开发始于 2014 年,并在 2016 年发布了首个稳定版本。自此,HikariCP 受到了许多开发者和企业的青睐,逐渐成为一款流行的数据库连接池。
适用场景:
HikariCP 适用于以下场景:
- 高性能需求的应用:需要快速处理大量数据的应用,例如高性能的 Web 应用、数据分析应用等。
- 高并发场景:需要支持大量用户同时访问的应用,如电商、社交平台等。
- 低延迟要求:对数据处理速度有较高要求的应用,例如金融、实时通信等场景。
HikariCP 的优势在于其高性能、简单易用和兼容性强,可以满足各种场景下使用。在选择连接池时,可以根据实际需求和预算考虑 HikariCP 和其他连接池。
官方资料:
HikariCP 的官方文档提供了详细的使用说明和配置选项,可以帮助开发者快速上手和深入了解 HikariCP。官方文档地址:https://hikari.readthedocs.io/en/latest/
社区:
HikariCP 有一个活跃的社区,开发者可以在社区中提问、分享经验和解决问题。社区地址:https://github.com/hikari-db/hikari
https://github.com/brettwooldridge/HikariCP
2、HikariCP特点
HikariCP 是一个高性能的 JDBC 数据库连接池。它旨在提供最佳的性能、可扩展性和易用性。以下是关于 HikariCP 的一些关键特性:
- 性能:HikariCP 被设计为提供最高性能的连接池。它通过使用直接连接、预处理语句池、JDBC 4.0 的 Statement caching 以及连接池参数的优化来提高性能。
- 可扩展性:HikariCP 具有可扩展的架构,可以轻松地集成到各种应用程序中。它支持可插拔的连接工厂、事务管理器、SSL 处理器等。
- 易用性:HikariCP 提供了一个简单易用的 API,使开发人员可以轻松地配置和监控连接池。
- 监控:HikariCP 具有内置的监控和诊断功能,可以帮助开发人员诊断和解决问题。
- 安全:HikariCP 支持 SSL 和加密,可以帮助保护数据传输的安全性。
总的来说,HikariCP 是一个高性能、可扩展、易用且安全的 JDBC 连接池,是许多应用程序开发人员的首选。
3、HikariCP参数说明
HikariCP 是一个高性能的 JDBC 连接池,它具有多种可配置的参数,以满足不同场景的需求。以下是 HikariCP 的一些重要配置参数及其说明:
jdbcUrl
:数据库连接字符串,用于指定数据库的地址、端口、用户名和密码等。username
和password
:数据库的用户名和密码。maximumPoolSize
:连接池的最大容量。当连接池中的可用连接数达到此值时,新的连接请求将被拒绝。connectionTimeout
:连接池的超时时间,单位为毫秒。当连接池中的连接空闲时间超过此值时,连接将被关闭。idleTimeout
:空闲连接的超时时间,单位为毫秒。当空闲连接空闲时间超过此值时,连接将被关闭。maxLifetime
:连接的最大生命周期,单位为毫秒。当连接的空闲时间超过此值时,连接将被关闭。minimumIdle
:连接池中必须保持的最小空闲连接数。poolName
:连接池的名称,用于标识连接池。databaseId
:数据库的类型,用于指定数据库的类型,例如 MySQL、PostgreSQL 等。prepStmtCacheSize
:预处理语句缓存大小。prepStmtCacheTimeout
:预处理语句缓存超时时间,单位为毫秒。connectionTestQuery
:连接测试查询,用于检测连接是否有效。autoCommit
:自动提交事务。maximumPoolSize
:连接池的最大连接数。sqlParserEnabled
:是否启用 SQL 解析器。properties
:连接池的属性,例如cachePrepStmts
、initSql
等。
这些参数可以根据实际需求进行配置,以达到最佳性能和体验。更多关于 HikariCP 的详细配置信息,可以参考其官方文档:https://hikaricp.zonble.org/configuration.html
4、Spring Boot整合HikariCP实战
HikariCP 是一个高性能的 JDBC 连接池,它旨在提供最佳的性能、可扩展性和易用性。HikariCP 是 Spring Boot 项目中的一个重要组件,它可以轻松地集成到 Spring Boot 应用程序中。以下是如何在 Spring Boot 项目中使用 HikariCP 以及详细配置参数说明。
- 添加依赖
在 Maven 项目的 pom.xml 文件中,添加 HikariCP 的依赖:
<dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>4.0.3</version>
</dependency>
- 创建数据源配置类
创建一个配置类,用于配置 HikariCP 连接池。在这个类中,我们需要配置 HikariCP 的连接参数,如数据库 URL、用户名、密码等。
@Configuration
public class DataSourceConfig {@Bean public DataSource dataSource() { // 配置 HikariCP 连接池 HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/test_db"); config.setUsername("username"); config.setPassword("password"); // 设置连接池其他配置参数 config.setMaximumPoolSize(10); config.setConnectionTimeout(30000); config.setIdleTimeout(600000); config.setMaxLifetime(1800000); // 创建 HikariDataSource 实例 return new HikariDataSource(config); }
}
- 配置事务管理器
在 Spring Boot 项目中,我们需要配置一个事务管理器,用于管理数据库事务。我们可以使用PlatformTransactionManager
来实现。
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource);
}
- 在服务类中使用数据源
现在我们可以在服务类中使用数据源来执行数据库操作了。
@Service
public class UserService {@Autowired private DataSource dataSource;public List<User> findAll() { try (Connection connection = dataSource.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM user"); ResultSet resultSet = preparedStatement.executeQuery()) {List<User> users = new ArrayList<>(); while (resultSet.next()) { users.add(new User(resultSet.getInt("id"), resultSet.getString("name"))); } return users; } }
}
在上面的示例中,我们创建了一个 DataSourceConfig
类来配置 HikariCP 连接池,并在 UserService
类中使用数据源来执行数据库操作。
关于 HikariCP 的详细配置参数,可以参考其官方文档:https://hikaricp.zonble.org/configuration.html
5、HikariCP和其他数据库连接池对比
HikariCP 是一款高性能的数据库连接池,与其他连接池相比,它具有以下优势:
- 性能:HikariCP 被认为是目前最快的数据库连接池,其性能优于其他连接池,如 C3P0、DBCP 等。据官方数据,HikariCP 的性能是 C3P0 的 25 倍左右。
- 代码量:HikariCP 的代码量非常小,只有 100 多行,这使得其执行效率更高,占用 CPU 和内存更少,且 BUG 出现几率较小。
- 配置简单:HikariCP 的配置相对简单,而且提供了丰富的配置选项,可以根据实际需求进行定制。
- 兼容性:HikariCP 支持多种数据库,如 MySQL、PostgreSQL、Oracle 等。
- Spring Boot 支持:Spring Boot 2.0 已经将 HikariCP 作为默认连接池配置。
与其他连接池的对比: - Druid:Druid 是阿里巴巴开源的一个数据库连接池,性能非常出色,可以满足高并发、高负载的环境。与 HikariCP 相比,Druid 在一些性能指标上略逊于 HikariCP,但依然保持着较高的水平。Druid 的配置相对复杂,但提供了很多高级功能,如密码加密、连接池监控等。
- C3P0:C3P0 是一个常用的 JDBC 数据源和连接池实现,其性能和稳定性表现良好。但与 HikariCP 相比,C3P0 在性能上有一定差距,尤其是在并发和负载较高的场景下。C3P0 的配置相对简单,适合中小型项目。
- DBCP:DBCP 是 Apache Commons 项目的一个组成部分,提供了一个简单易用的连接池实现。但与 HikariCP 相比,DBCP 在性能和功能上有一定不足,如连接池管理不够灵活,无法满足高并发场景。
综上所述,HikariCP 是一款高性能、简单易用、兼容性强的数据库连接池,适合各种场景下使用。在选择连接池时,可以根据实际需求和预算考虑 HikariCP 和 Druid。如果对性能要求非常高,可以考虑使用 HikariCP;如果需要更多高级功能,可以选择 Druid。
6、HikariCP常见问题汇总
HikariCP 作为一款高性能的数据库连接池,虽然在许多场景下表现优秀,但仍然可能遇到一些问题。以下是一些常见的 BUG 及相应的解决方法:
- 连接失败或连接超时:
在使用 HikariCP 过程中,可能会遇到连接失败或连接超时的问题。这通常是由于数据库配置错误、网络问题或数据库服务器本身的问题导致的。
解决方法:
- 检查数据库配置,确保配置正确。
- 检查网络连接,确保可以正常连接到数据库服务器。
- 如果问题仍然存在,可能是数据库服务器本身的问题,需要联系数据库管理员进行处理。
以下是一个简单的示例,演示了如何配置 HikariCP 连接 MySQL 数据库:
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
public class HikariCPDemo { public static void main(String[] args) { HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/test"); config.setUsername("root"); config.setPassword("123456"); config.setMaximumPoolSize(10); config.setConnectionTimeout(3000);HikariDataSource dataSource = new HikariDataSource(config); // 使用数据源 }
}
- 数据库连接数过多:
在某些情况下,可能会出现数据库连接数过多的问题,导致系统资源不足。
解决方法:
- 检查连接池配置,确保最大连接数设置合理。
- 如果问题仍然存在,可能需要调整数据库服务器的资源配置,或者优化应用的代码,减少数据库连接的使用。
- 密码加密失败:
在使用密码加密时,可能会遇到加密失败的问题。
解决方法:
- 检查密码加密配置,确保配置正确。
- 如果问题仍然存在,可能需要调整加密算法或密码策略。
以下是一个简单的示例,演示了如何在 HikariCP 中使用密码加密:
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
public class HikariCPDemo { public static void main(String[] args) { HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/test"); config.setUsername("root"); config.setPassword("123456"); config.setMaximumPoolSize(10); config.setConnectionTimeout(3000);// 密码加密 config.setPasswordEncoder(new CustomPasswordEncoder());HikariDataSource dataSource = new HikariDataSource(config); // 使用数据源 }
}
以上是关于 HikariCP 常见问题及其解决方法的汇总。如果您在使用过程中遇到其他问题,可以在 HikariCP 的 GitHub 仓库中查找相关问题或提交新的 issue。GitHub 仓库地址:https://github.com/hikari-db/hikari
相关文章:

Spring Boot实战 | 如何整合高性能数据库连接池HikariCP
专栏集锦,大佬们可以收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https:/…...
Spring依赖注入
依赖注入底层原理流程图: https://www.processon.com/view/link/5f899fa5f346fb06e1d8f570 Spring中有两种依赖注入的方式 首先分两种: 手动注入自动注入 手动注入 在XML中定义Bean时,就是手动注入,因为是程序员手动给某个属…...

Linux下Jenkins自动化部署SpringBoot应用
Linux下Jenkins自动化部署SpringBoot应用 1、 Jenkins介绍 官方网址:https://www.jenkins.io/ 2、安装Jenkins 2.1 centos下命令行安装 访问官方,点击文档: 点击 Installing Jenkins: 点击 Linux: 选择 Red Hat/…...
【git 学习】--- ubuntu18.04 搭建本地git服务器
在Ubuntu18.04 上简单创建自己的git服务器~ 环境配置 Ubuntu: 18.04git服务器搭建步骤: ##1.安装git sudo apt-get install git##2.添加用户 sudo adduser test_git //test_git -- git用户名##3. 在Git用户的home目录下创建文件夹,作为裸仓库 sudo…...

JAVA电商平台免费搭建 B2B2C商城系统 多用户商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城
涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis …...
Android 13 Framework 裁剪
裁剪应用 1. 修改 build/core/product.mk 添加PRODUCT_DEL_PACKAGES变量的声明 新增一行_product_single_value_vars PRODUCT_DEL_PACKAGES # The first API level this product shipped with _product_single_value_vars PRODUCT_SHIPPING_API_LEVEL _product_single_val…...
【Axios封装示例Vue2】
文章目录 为什么要封装axios?如何封装axios在Vue组件中使用封装的axios 为什么要封装axios? 在Vue 2项目中,直接在组件中使用axios可能会导致以下问题: 代码重复:每个组件都需要导入axios并编写相似的请求代码&#…...
k8s-----20、持久化存储--PV/PVC
PV/PVC 1、概念1.1 基本定义1.2 生命周期1.3 PV 卷阶段状态 2、 示例2.1 创建pod和PVC 与PV2.2 绑定PV2.3 强制删除pv,pvc2.4 测试 1、概念 1.1 基本定义 PersistentVolume(PV)是集群中由管理员配置的一段网络存储。 它是集群中的资源,就像…...
python matplotlib 生成矢量图
import matplotlib.pyplot as plt plt.savefig(r"xxx.svg", format"svg")注意: plt.savefig(r"xxx.svg", format"svg") 需要放在 plt.show()前面 原因:如果在 plt.show()调用后, 实际上已经创建了一…...

机器学习中常见的特征工程处理
一、特征工程 特征工程(Feature Engineering)对特征进行进一步分析,并对数据进行处理。 常见的特征工程包括:异常值处理、缺失值处理、数据分桶、特征处理、特征构造、特征筛选及降维等。 1、异常值处理 具体实现 from scipy.s…...

Spring IOC 和 AOP
核心概念 咱们这节就讲完了,在这节中我们讲了两个大概念,一个叫做IOC,一个叫做DI IOC是什么?是用对象的时候不要自己用new而是由外部提供,而spring在进行实现的时候是谁提供,就是IOC容器给你提供。 DI是什…...

echarts插件-liquidFill(水球图)
echarts插件-liquidFill(水球图) 1.下载2.引入:3.使用 1.下载 echarts.js下载:https://cdnjs.com/libraries/echarts echarts-liquidfill.js下载:https://github.com/ecomfe/echarts-liquidfill 2.引入: …...
c++ vscode cmake debug for mac
1. 下载vscode 2. 安装c插件 参考:C programming with Visual Studio Code 3. 安装llvm,可以使用brew安装 4. 配置llvm到系统环境变量中 5. 编写c代码 6. 编写CMakeLists.txt文件(前提安装cmake) cmake_minimum_required(V…...

17 结构型模式-享元模式
1 享元模式介绍 2 享元模式原理 3 享元模式实现 抽象享元类可以是一个接口也可以是一个抽象类,作为所有享元类的公共父类, 主要作用是提高系统的可扩展性. //* 抽象享元类 public abstract class Flyweight {public abstract void operation(String extrinsicState); }具体享…...
创建Secret(手动)
和创建其他类型的 API 对象(Pod、Deployment、StatefulSet、ConfigMap 等)一样,您也可以先在 yaml 文件中定义好 Secret,然后通过 kubectl apply -f 命令创建。此时,您可以通过如下两种方式在 yaml 文件中定义 Secret&…...

基于PHP的线上购物商城,MySQL数据库,PHPstudy,原生PHP,前台用户+后台管理,完美运行,有一万五千字论文。
目录 演示视频 基本介绍 论文截图 功能结构 系统截图 演示视频 基本介绍 基于PHP的线上购物商城,MySQL数据库,PHPstudy,原生PHP,前台用户后台管理,完美运行,有一万五千字论文。 现如今,购物网站是商业…...
Lua 事件触发机制(注册,触发)
日常工作中经常会用到触发机制,这里就提供一个注册触发机制,在代码中在也不用专门去调用各个模块的接口;只需要触发即可,触发后会自动调用接口 直接上代码 local _EventHandle {}; _EventHandle.listenerHandleIndex 0 _EventH…...
c++ 并发与多线程(12)线程安全的单例模式-1
一、什么是线程安全 在拥有共享数据的多条数据并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。 二、如何保证线程安全 法1、给共享的资源加把锁,保证每个资源变量每时每刻至多被一个线程占用; 法2、让线…...
Python学习笔记--迭代
一、迭代 什么叫做迭代? 比如在 Java 中,我们通过 List 集合的下标来遍历 List 集合中的元素,在 Python 中,给定一个 list 或 tuple,我们可以通过 for 循环来遍历这个 list 或 tuple ,这种遍历就是迭代。…...

idea免费插件分享
分享一些在开发中常用到的idea插件,都是一些我自己常用的,希望对各位程序员有帮助吧。 1、Chinese Language 汉化插件:中文语言包将为您的 IntelliJ IDEA, AppCode, CLion, DataGrip, GoLand, PyCharm, PhpStorm, RubyMine, WebStorm, 和Rid…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...

Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...

基于单片机的宠物屋智能系统设计与实现(论文+源码)
本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢,连接红外测温传感器,可实时精准捕捉宠物体温变化,以便及时发现健康异常;水位检测传感器时刻监测饮用水余量,防止宠物…...

【1】跨越技术栈鸿沟:字节跳动开源TRAE AI编程IDE的实战体验
2024年初,人工智能编程工具领域发生了一次静默的变革。当字节跳动宣布退出其TRAE项目(一款融合大型语言模型能力的云端AI编程IDE)时,技术社区曾短暂叹息。然而这一退场并非终点——通过开源社区的接力,TRAE在WayToAGI等…...