高性能 数据库连接池 HikariCP | 构造 HikariCP 数据源

2024-03-12 07:20

本文主要是介绍高性能 数据库连接池 HikariCP | 构造 HikariCP 数据源,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

👀 上节回顾:上一节对 HikariCP 数据源进行了简单介绍。
👉 本节目标:了解如何构造 HikariCP 数据库。


既然那么快,那么怎么构造 HikariCP 数据源,然后用起来呢?

多种构造方法

HikariDataSource 有两个构造方法:

  • 默认构造器:使用 setter 方法来配置连接池。 相比于下面的方法,其性能会稍微低一点,因为有 lazy initialization check。
  • 使用指定的 HikariConfig 构造:其会复制 HikariConfig 到 HikariDataSource,所以修改 HikariConfig 不会影响 HikariDataSource。
/**
* Default constructor.  Setters are used to configure the pool.  Using
* this constructor vs. {@link #HikariDataSource(HikariConfig)} will
* result in {@link #getConnection()} performance that is slightly lower
* due to lazy initialization checks.
*
* The first call to {@link #getConnection()} starts the pool.  Once the pool
* is started, the configuration is "sealed" and no further configuration
* changes are possible -- except via {@link HikariConfigMXBean} methods.
*/
public HikariDataSource()
{super();fastPathPool = null;
}/**
* Construct a HikariDataSource with the specified configuration.  The
* {@link HikariConfig} is copied and the pool is started by invoking this
* constructor.
*
* The {@link HikariConfig} can be modified without affecting the HikariDataSource
* and used to initialize another HikariDataSource instance.
*
* @param configuration a HikariConfig instance
*/
public HikariDataSource(HikariConfig configuration)
{configuration.validate();configuration.copyStateTo(this);LOGGER.info("{} - Starting...", configuration.getPoolName());pool = fastPathPool = new HikariPool(this);LOGGER.info("{} - Start completed.", configuration.getPoolName());this.seal();
}

HikariConfig 有三个构造方法:

  • 默认构造器:使用 setter 方法设置配置
  • 使用 Properties 构造:传入 Properties 配置
  • 使用 Properties 文件路径构造:给到 Properties 配置文件路径,然后加载为 Properties
/**
* Default constructor
*/
public HikariConfig()
{dataSourceProperties = new Properties();healthCheckProperties = new Properties();minIdle = -1;maxPoolSize = -1;maxLifetime = MAX_LIFETIME;connectionTimeout = CONNECTION_TIMEOUT;validationTimeout = VALIDATION_TIMEOUT;idleTimeout = IDLE_TIMEOUT;initializationFailTimeout = 1;isAutoCommit = true;keepaliveTime = DEFAULT_KEEPALIVE_TIME;String systemProp = System.getProperty("hikaricp.configurationFile");if (systemProp != null) {loadProperties(systemProp);}
}/**
* Construct a HikariConfig from the specified properties object.
*
* @param properties the name of the property file
*/
public HikariConfig(Properties properties)
{this();PropertyElf.setTargetFromProperties(this, properties);
}/**
* Construct a HikariConfig from the specified property file name.  <code>propertyFileName</code>
* will first be treated as a path in the file-system, and if that fails the
* Class.getResourceAsStream(propertyFileName) will be tried.
*
* @param propertyFileName the name of the property file
*/
public HikariConfig(String propertyFileName)
{this();loadProperties(propertyFileName);
}

最简单的构造案例

最简单的方式,就是直接使用 HikariDataSource 的默认构造器,然后使用 setter 方法设置属性。

HikariDataSource ds = new HikariDataSource();
ds.setJdbcUrl("jdbc:mysql://localhost:3306/simpsons");
ds.setUsername("bart");
ds.setPassword("51mp50n");

是不是很 easy?😊

SpringBoot 如何构造?

SpringBoot 提供了对 HikariCP 连接池的自动化配置。当满足如下条件时,自动配置 HikariCP 数据源:

  • 重点1:有 HikariDataSource 类,且没有定义 DataSource Bean
  • 重点2:spring.datasource.type 未填值,或者值为 com.zaxxer.hikari.HikariDataSource
  • 重点3:根据配置和 Jdbc 连接明细创建 HikariDataSource
/*** Hikari DataSource configuration.*/
@Configuration(proxyBeanMethods = false)
// 重点1:有 HikariDataSource 类,且没有定义 DataSource Bean
@ConditionalOnClass(HikariDataSource.class)
@ConditionalOnMissingBean(DataSource.class)
// 重点2:spring.datasource.type 未填值,或者值为 com.zaxxer.hikari.HikariDataSource 时
@ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.zaxxer.hikari.HikariDataSource",matchIfMissing = true)
static class Hikari {@Beanstatic HikariJdbcConnectionDetailsBeanPostProcessor jdbcConnectionDetailsHikariBeanPostProcessor(ObjectProvider<JdbcConnectionDetails> connectionDetailsProvider) {return new HikariJdbcConnectionDetailsBeanPostProcessor(connectionDetailsProvider);}// 重点3:根据 spring.datasource.hikari 配置和 Jdbc 连接明细创建 HikariDataSource@Bean@ConfigurationProperties(prefix = "spring.datasource.hikari")HikariDataSource dataSource(DataSourceProperties properties, JdbcConnectionDetails connectionDetails) {HikariDataSource dataSource = createDataSource(connectionDetails, HikariDataSource.class,properties.getClassLoader());if (StringUtils.hasText(properties.getName())) {dataSource.setPoolName(properties.getName());}return dataSource;}}

spring.datasource.hikari相关配置项将直接应用到 HikariDataSource 类上,该类继承关系如下:

HikariDataSource extends HikariConfig implements DataSource, Closeable

在 HikariConfig 类包含可配置的属性:比如 connectionTimeout
在这里插入图片描述
这样,通过配置文件 + 自动化配置即可完成自定义 HikariCP 数据源配置啦!😊

相关文章

1.高性能 数据库连接池 | HikariCP 简介
2.高性能 数据库连接池 HikariCP | 构造 HikariCP 数据源
3.高性能 数据库连接池 HikariCP | HikariCP 配置详解
4.高性能 数据库连接池 HikariCP | 连接池大小配置误区
5.高性能 数据库连接池 HikariCP | MySQL 最佳性能实践

这篇关于高性能 数据库连接池 HikariCP | 构造 HikariCP 数据源的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/800508

相关文章

数据库面试必备之MySQL中的乐观锁与悲观锁

《数据库面试必备之MySQL中的乐观锁与悲观锁》:本文主要介绍数据库面试必备之MySQL中乐观锁与悲观锁的相关资料,乐观锁适用于读多写少的场景,通过版本号检查避免冲突,而悲观锁适用于写多读少且对数... 目录一、引言二、乐观锁(一)原理(二)应用场景(三)示例代码三、悲观锁(一)原理(二)应用场景(三)示例

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

mysql数据库重置表主键id的实现

《mysql数据库重置表主键id的实现》在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,本文主要介绍了mysql数据库重置表主键id的实现,具有一定的参考价值,感兴趣的可以了... 目录关键语法演示案例在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,当我们

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma