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

多数据源 - dynamic-datasource | 集成 HikariCP 连接池

文章目录

  • 连接池集成简介
  • HikariCP 连接池
    • 默认 HikariCP 配置
    • 自定义 HikariCP 配置
  • Druid 连接池
  • BeeCp 连接池
  • DBCP2 连接池
  • JNDI 数据源

🗯️ 上节回顾:上一节中,实现了 dynamic-datasource 的快速入门。
👉 本节目标:在上一节的基础上,集成 HikariCP 数据库连接池并介绍原理。
🚀 本节内容:

  • 连接池集成简介及原理
  • HikariCP 连接池集成说明
  • 其它连接池集成说明

🔊 版本

  • JDK 17
  • Spring Boot 3.2.1
  • dynamic-datasource 4.3.0
  • HikariCP 5.0.1
  • Druid 1.2.21

连接池集成简介

dynamic-datasource 支持不同的连接池集成。连接池配置方式:

  • 全局连接池配置:每个数据源都可以继承它
  • 每个数据源使用 type 指定连接池,支持覆盖全局连接池配置。如果未指定,则按照 Druid > HikariCP > BeeCp > DBCP2 > Spring Basic。
  • 每个数据源可以使用不同的连接池,但不推荐。比如 master 使用 Druid 连接池,slave 使用 HikariCP 连接池。

👉 连接池集成原理:先引入依赖 -> 然后添加配置 -> 最后根据配置来创建连接池

  • 引入连接池依赖,比如 Druid、HikariCP 的 Spring Boot Starter
  • 使用 dynamic-datasource 配置连接池配置
    • 核心配置类:DynamicDataSourceProperties,前缀为 spring.datasource.dynamic
      • 连接池全局配置,比如 DruidConfig、HikariCpConfig
      • 每个数据源的配置

image.png

  • 每个数据源的配置类:DataSourceProperties,包括 DataSource 基本信息、seata 支持、p6spy 支持、懒加载支持、初始化 SQL 配置、各个连接池配置、解密公钥等。

image.png

  • 具体的连接池配置类和 Creator:比如 DruidConfigHikariCpConfig
    • 比如 Druid,提供 DruidConfig 来配置 Druid,提供 DruidDataSourceCreator 来创建 DruidDataSource。
    • 比如 HikariCP,提供 HikariCpConfig 来配置 HikariCP,提供 HikariDataSourceCreator 来创建 HikariDataSource。

image.png

HikariCP 连接池

HikariCP 是 SpringBoot 默认使用的连接池,即便我们没有添加任何连接池配置。

默认 HikariCP 配置

通过 debug,我们即可看到 HikariDataSource 默认配置如下:

  • 固定连接池大小为 10
  • 最大生命周期为 180000s = 30min

image.png
因为没有添加 HikariCp 配置,所以使用的都是默认配置:
image.png

自定义 HikariCP 配置

那么如何自定义 HikariCP 配置呢?

  • 如果没有配置参数,则保持原组件默认值
  • 如果配置了全局参数,则每个数据源都会继承对应参数
  • 每个数据源可以单独设置参数覆盖全局参数

注意:HikariCP 原生设置某些字段名和 dynamic-datasource 不一致。以 dynamic-datasource 的为主,比如 auto-commit(HikariCp) -> is-auto-commit(dynamic-datasource)。

  • HikariCP 字段名和其 set 名称不一致
  • dynamic-datasource 则是使用参数名反射设置

👉 配置示例

spring:
  datasource

http://www.kler.cn/a/274637.html

相关文章:

  • Hutool工具包的常用工具类的使用介绍
  • 多屏幕编程时用pygame指定窗口出现在第二块显示器上的方法
  • 基于蓝牙通信的手机遥控智能灯(论文+源码)
  • 启用WSL后,使用ssh通道连接ubuntu
  • Windows安全中心(病毒和威胁防护)的注册
  • RestTemplate实时接收Chunked编码传输的HTTP Response
  • 安卓面试题多线程 96-100
  • es 集群安全认证
  • 【SpringSecurity】十三、基于Session实现授权认证
  • 使用OpenRewrite自动做框架升级比如Spring Boot
  • Siloed No More: How AI-Driven Tech Stack Consolidation Boosts Revenue
  • C# 使用OpenCvSharp4将Bitmap合成为MP4视频的环境
  • O2OA红头文件流转与O2OA版式公文编辑器基本使用
  • java基础-Test03:图书管理系统 超详细注释
  • vue-router(v4.0) 基础3
  • Panasonic松下PLC如何数据采集?如何实现快速接入IIOT云平台?
  • fs方法举例
  • 蓝桥杯day4刷题日记
  • 算法笔记p335堆
  • 景联文科技:提供通用多模态数据,助力AI多模态领域实现飞跃式发展
  • CMU 10-414/714: Deep Learning Systems --hw3
  • HTML、XHTML和HTML5 的区别是什么?
  • 《优化接口设计的思路》系列:第九篇—用好缓存,让你的接口速度飞起来
  • Linux运维_Linux临时环境变量设置(bin和include以及lib)
  • Android14音频进阶:AudioFlinger究竟如何混音?(六十三)
  • 开源离线语音识别输入工具CapsWriter v1.0——支持无限时长语音、音视频文件转录字幕。