MyBatis 内置连接池 POOLED 详解
MyBatis 提供了一个内置的数据库连接池实现 POOLED,它是 MyBatis 自带的一个简单但高效的连接池实现。
一、POOLED 连接池基本特性
1. 核心特点
- 轻量级实现:不依赖第三方连接池库
- 基本功能完备:满足大多数小型应用的连接池需求
- 配置简单:直接在 MyBatis 配置文件中设置
- 自动管理:自动处理连接的获取、回收和释放
2. 适用场景
- 中小型应用
- 开发和测试环境
- 不需要高级连接池功能的场景
二、配置方式
在 MyBatis 的配置文件中配置 POOLED 数据源:
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
<!-- 以下是连接池特有配置 -->
<property name="poolMaximumActiveConnections" value="10"/>
<property name="poolMaximumIdleConnections" value="5"/>
<property name="poolMaximumCheckoutTime" value="20000"/>
<property name="poolTimeToWait" value="20000"/>
<property name="poolPingQuery" value="SELECT 1"/>
<property name="poolPingEnabled" value="true"/>
<property name="poolPingConnectionsNotUsedFor" value="3600000"/>
</dataSource>
</environment>
</environments>
三、主要配置参数详解
| 参数名 | 说明 | 默认值 |
|---|---|---|
| poolMaximumActiveConnections | 连接池中最大活动连接数 | 10 |
| poolMaximumIdleConnections | 连接池中最大空闲连接数 | 5 |
| poolMaximumCheckoutTime | 连接被检出后的最大使用时间(毫秒) | 20000 |
| poolTimeToWait | 获取连接时的等待超时时间(毫秒) | 20000 |
| poolPingQuery | 用于检测连接是否有效的SQL语句 | 无 |
| poolPingEnabled | 是否启用连接检测 | false |
| poolPingConnectionsNotUsedFor | 连接多久未使用后需要检测(毫秒) | 0 |
四、POOLED 连接池工作原理
初始化阶段:
- 创建初始的空闲连接(不超过poolMaximumIdleConnections)
获取连接:
- 首先尝试从空闲池获取可用连接
- 如果没有可用连接且未达到最大活动连接数,创建新连接
- 如果已达到最大活动连接数,等待直到有连接释放或超时
归还连接:
- 使用完毕后连接返回到空闲池
- 如果空闲池已满,则直接关闭连接
连接检测:
- 如果启用了poolPingEnabled,会定期检测连接有效性
- 使用poolPingQuery发送测试SQL验证连接
五、与第三方连接池对比
| 特性 | MyBatis POOLED | HikariCP | Druid |
|---|---|---|---|
| 性能 | 中等 | 极高 | 高 |
| 功能 | 基础 | 丰富 | 非常丰富 |
| 监控 | 无 | 基本 | 全面 |
| 适用场景 | 小型应用 | 高性能应用 | 企业级应用 |
六、最佳实践建议
生产环境建议:
- 对于生产环境,建议使用更成熟的连接池如 HikariCP 或 Druid
- POOLED 适合开发和测试环境使用
配置优化建议:
<!-- 优化后的配置示例 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value="password"/> <property name="poolMaximumActiveConnections" value="20"/> <property name="poolMaximumIdleConnections" value="10"/> <property name="poolMaximumCheckoutTime" value="30000"/> <property name="poolTimeToWait" value="10000"/> <property name="poolPingEnabled" value="true"/> <property name="poolPingQuery" value="SELECT 1"/> <property name="poolPingConnectionsNotUsedFor" value="3600000"/> </dataSource>
常见问题处理:
- 连接泄漏:确保在所有代码路径中都正确关闭连接
- 连接超时:适当增加poolMaximumCheckoutTime和poolTimeToWait
- 连接失效:启用poolPingEnabled并设置合理的检测间隔
升级到第三方连接池:
如果需要更强大的功能,可以轻松替换为其他连接池:<dataSource type="com.zaxxer.hikari.HikariDataSource"> <!-- HikariCP 配置 --> </dataSource>
MyBatis 的 POOLED 连接池提供了基本但够用的连接池功能,对于不复杂的小型应用来说是一个简便的选择。但对于需要更高性能、更好监控或更复杂功能的生产环境,建议考虑使用专门的连接池实现。
到此这篇关于MyBatis 内置连接池 POOLED 详解的文章就介绍到这了,更多相关MyBatis 连接池 POOLED 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
springboot整合mybatis实现多表查询的实战记录
SpringBoot对数据库操作有多种方式,下面这篇文章主要给大家介绍了关于springboot整合mybatis实现多表查询的相关资料,文中通过示例代码以及图文介绍的非常详细,需要的朋友可以参考下2021-08-08
SpringBoot项目集成Swagger和swagger-bootstrap-ui及常用注解解读
这篇文章主要介绍了SpringBoot项目集成Swagger和swagger-bootstrap-ui及常用注解解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-03-03


最新评论