mybatis 通过替换数据源集成 hikaricp 提升性能,无需修改自身逻辑;需添加依赖、配置连接池参数并启用连接验证与正确关闭 sqlsession 防泄露。

MyBatis 本身不内置连接池,它依赖外部数据源(DataSource)管理数据库连接。要提升性能,只需将默认的简易数据源(如 UnpooledDataSource)替换为高性能的 HikariCP,再通过配置或代码注入即可完成集成——无需修改 MyBatis 逻辑,也不用额外适配层。
引入 HikariCP 依赖
确保项目中已添加 HikariCP 的 Maven 依赖(Spring Boot 2.0+ 默认包含,但建议显式声明并锁定版本):
配置 HikariCP 数据源(推荐 Spring Boot 方式)
在 application.yml 中直接配置,MyBatis 会自动使用该数据源:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC
username: root
password: password
hikari:
maximum-pool-size: 20
minimum-idle: 5
connection-timeout: 3000
idle-timeout: 600000
max-lifetime: 1800000
connection-test-query: SELECT 1
Spring Boot 会自动创建 HikariDataSource 并注册为 Bean,MyBatis 的 SqlSessionFactory 将直接引用它。
手动配置(非 Spring Boot 场景)
若未使用 Spring,可显式构建 HikariDataSource 并传给 MyBatis:
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
config.setUsername("root");
config.setPassword("password");
config.setMaximumPoolSize(20);
config.setMinimumIdle(5);
config.setConnectionTimeout(3000);
config.setIdleTimeout(600000);
config.setMaxLifetime(1800000);
config.setConnectionTestQuery("SELECT 1");
HikariDataSource dataSource = new HikariDataSource(config);
// 传入 SqlSessionFactoryBuilder
SqlSessionFactory factory = new SqlSessionFactoryBuilder()
.build(new Configuration(dataSource));
配合 MyBatis 的关键注意事项
必须启用连接有效性验证:MySQL 等数据库常设 wait_timeout(默认 8 小时),空闲连接会被服务端主动断开。HikariCP 若继续复用,会抛出异常。因此需确保:
-
idle-timeout比数据库wait_timeout至少小 2 分钟(如 DB 设为 10 分钟,则 HikariCP 设 600000ms) -
max-lifetime设为 25–30 分钟,强制轮换长连接,避免网络闪断后残留“假死连接” -
connection-test-query(如SELECT 1)开启,确保借出前校验连接存活
避免连接泄露:MyBatis 的 SqlSession 必须正确关闭(推荐用 try-with-resources),否则连接无法归还池中,最终耗尽:
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
List
// 自动关闭 session,连接归还池中
}
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











