HikariCP是什么
HikariCP(简称 Hikari)是一个高性能的 JDBC 连接池实现,用于管理和提供数据库连接。它是由日本人许成林(Brett Wooldridge)开发的,是目前广泛应用于 Java 开发中的一种连接池实现。
以下是 HikariCP 的一些特点和优势:
-
高性能: HikariCP 以高性能著称,通过使用低开销的并发访问机制、有效地利用线程池、采用轻量级的对象池等技术,使得在高负载情况下依然能够保持稳定的性能表现。
-
轻量级: HikariCP 的代码精简、依赖少,不依赖于其他第三方库,因此具有较小的内存占用和较低的启动时间。这使得它非常适合于内存有限的环境或者需要快速启动的场景。
-
自动管理: HikariCP 提供了自动的连接池管理机制,包括连接的获取、释放、空闲连接的回收等操作。它会根据配置参数自动调整连接池的大小,以适应不同负载下的需求。
-
可配置性强: HikariCP 提供了丰富的配置选项,可以通过配置文件或者编程方式来调整连接池的行为,如连接超时时间、最大连接数、最小空闲连接数、连接生命周期等。
-
适用性广: HikariCP 支持主流的 JDBC 数据库,并且与各种 Java 框架(如 Spring、Hibernate 等)无缝集成,使得它可以广泛应用于各种 Java 应用程序中。
总的来说,HikariCP 是一个高性能、轻量级、自动管理的 JDBC 连接池,具有良好的可配置性和广泛的适用性,是 Java 开发者构建高效、稳定的数据库访问组件的理想选择。
在springboot中使用HikariCP
在 Spring Boot 中使用 HikariCP 是非常简单的,因为 Spring Boot 默认就已经集成了 HikariCP 作为默认的数据源实现。你只需要在 application.properties
或 application.yml
文件中配置数据源相关的参数,Spring Boot 就会自动配置 HikariCP 数据源。
以下是在 Spring Boot 中使用 HikariCP 的基本步骤:
- 添加 HikariCP 依赖: 如果你是使用 Maven 进行项目管理,那么不需要额外添加 HikariCP 依赖,因为 Spring Boot 默认已经包含了 HikariCP。如果你手动管理依赖,则需要确保项目中包含 HikariCP 的依赖。
<!-- HikariCP 依赖已经在 Spring Boot Starter JDBC 或 Spring Boot Starter Data JPA 中包含 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
- 配置数据源参数: 在
application.properties
或application.yml
文件中添加数据源的配置参数,如下所示:
# application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.maximum-pool-size=10
在这个示例中,我们配置了一个名为 spring.datasource
的数据源,使用了 HikariCP。你可以根据自己的需要调整连接池的配置参数,如连接超时时间、最大连接数等。
- 使用数据源: 配置完成后,你可以在你的应用程序中注入数据源,然后使用它来执行数据库操作。例如,你可以注入
JdbcTemplate
或者DataSource
,并在业务逻辑中使用它们来执行 SQL 操作。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
@Service
public class MyService {
private final JdbcTemplate jdbcTemplate;
@Autowired
public MyService(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void performDatabaseOperation() {
jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS my_table (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255))");
}
}
在这个示例中,我们注入了一个 JdbcTemplate
,它会自动使用我们配置的 HikariCP 数据源来执行 SQL 操作。
- 启动应用程序: 最后,启动你的 Spring Boot 应用程序,HikariCP 将会自动初始化连接池,并且准备好可用的数据库连接。你可以在应用程序中自由地使用数据库连接来进行数据库操作。
通过以上步骤,你就可以在你的 Spring Boot 项目中使用 HikariCP 数据源了。
HikariCP 相关配置
-
dataSourceClassName 或 driverClassName: 数据源类名或驱动类名,根据你所使用的数据库类型进行设置。
-
jdbcUrl: 数据库连接 URL。
-
username 和 password: 数据库用户名和密码。
-
connectionTimeout: 连接超时时间,单位为毫秒,默认为 30 秒。指的是从连接池获取连接时等待的最长时间,超过该时间将抛出异常。
-
idleTimeout: 连接空闲超时时间,单位为毫秒,默认为 600 秒。指的是连接在连接池中保持空闲状态的最长时间,超过该时间将被关闭并从连接池中移除。
-
maxLifetime: 连接最大生命周期,单位为毫秒,默认为 1800 秒。指的是连接在连接池中保持活动状态的最长时间,超过该时间将被关闭并从连接池中移除。
-
maximumPoolSize: 连接池最大连接数,默认为 10。指的是连接池中允许存在的最大连接数,超过该数目的连接将不会被创建。
-
minimumIdle: 连接池最小空闲连接数,默认为与
maximumPoolSize
相同。指的是连接池中保持空闲状态的最小连接数,如果空闲连接数少于该值,连接池会创建新的连接。 -
initializationFailTimeout: 连接池初始化失败超时时间,单位为毫秒,默认为 1 秒。指的是连接池初始化时如果发生错误,等待重试的最长时间。
-
leakDetectionThreshold: 连接泄露检测阈值,单位为毫秒,默认为 0,表示禁用泄露检测。指的是当连接在从连接池中获取后,返回连接池之前的时间超过该阈值时,将被视为泄露连接。
-
poolName: 连接池名称,默认为 “HikariPool-{n}”。指的是连接池的名称,用于日志记录和调试。
-
metricRegistry: 指定 MetricRegistry 实例,用于记录连接池的指标信息。
-
healthCheckRegistry: 指定 HealthCheckRegistry 实例,用于进行连接池的健康检查。
-
allowPoolSuspension: 是否允许暂停连接池,默认为 false。指的是当连接池暂停时,是否允许连接池暂停所有的操作。
-
readOnly: 是否只读连接,默认为 false。指的是是否将连接标记为只读,以便一些数据库可以做一些优化。
-
registerMbeans: 是否注册 MBeans,默认为 false。指的是是否在 JMX 中注册连接池的管理 Bean。
-
catalog: 默认数据库目录,默认为
""
。指的是默认情况下使用的数据库目录,用于在数据库连接的生命周期内设置SET CATALOG
。