MyBatis 内置连接池 POOLED 详解

 更新时间:2026年02月09日 09:17:22   作者:思静鱼  
MyBatis提供了一个内置的数据库连接池实现POOLED,它是MyBatis自带的一个简单但高效的连接池实现,具有一定的参考价值,感兴趣的可以了解一下

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 连接池工作原理

  1. 初始化阶段

    • 创建初始的空闲连接(不超过poolMaximumIdleConnections)
  2. 获取连接

    • 首先尝试从空闲池获取可用连接
    • 如果没有可用连接且未达到最大活动连接数,创建新连接
    • 如果已达到最大活动连接数,等待直到有连接释放或超时
  3. 归还连接

    • 使用完毕后连接返回到空闲池
    • 如果空闲池已满,则直接关闭连接
  4. 连接检测

    • 如果启用了poolPingEnabled,会定期检测连接有效性
    • 使用poolPingQuery发送测试SQL验证连接

五、与第三方连接池对比

特性MyBatis POOLEDHikariCPDruid
性能中等极高
功能基础丰富非常丰富
监控基本全面
适用场景小型应用高性能应用企业级应用

六、最佳实践建议

  1. 生产环境建议

    • 对于生产环境,建议使用更成熟的连接池如 HikariCP 或 Druid
    • POOLED 适合开发和测试环境使用
  2. 配置优化建议

    <!-- 优化后的配置示例 -->
    <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>
    
  3. 常见问题处理

    • 连接泄漏:确保在所有代码路径中都正确关闭连接
    • 连接超时:适当增加poolMaximumCheckoutTime和poolTimeToWait
    • 连接失效:启用poolPingEnabled并设置合理的检测间隔
  4. 升级到第三方连接池
    如果需要更强大的功能,可以轻松替换为其他连接池:

    <dataSource type="com.zaxxer.hikari.HikariDataSource">
      <!-- HikariCP 配置 -->
    </dataSource>
    

MyBatis 的 POOLED 连接池提供了基本但够用的连接池功能,对于不复杂的小型应用来说是一个简便的选择。但对于需要更高性能、更好监控或更复杂功能的生产环境,建议考虑使用专门的连接池实现。

到此这篇关于MyBatis 内置连接池 POOLED 详解的文章就介绍到这了,更多相关MyBatis  连接池 POOLED 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringCloud Bus 消息总线的具体使用

    SpringCloud Bus 消息总线的具体使用

    这篇文章主要介绍了SpringCloud Bus 消息总线的具体使用,详细的介绍了什么是消息总线以及具体配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • springboot整合mybatis实现多表查询的实战记录

    springboot整合mybatis实现多表查询的实战记录

    SpringBoot对数据库操作有多种方式,下面这篇文章主要给大家介绍了关于springboot整合mybatis实现多表查询的相关资料,文中通过示例代码以及图文介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • Java 如何使用正则表达式去除前导0

    Java 如何使用正则表达式去除前导0

    这篇文章主要介绍了Java 使用正则表达式去除前导0的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 基于Java编写一个通用返回工具类Result

    基于Java编写一个通用返回工具类Result

    Java项目搭建时,常常需要去封装一个通用型的Result工具类,下面小编就和大家分享一个已经封装好的常用的返回类,希望对大家有所帮助
    2023-07-07
  • SpringBoot项目Web拦截器使用的多种方式

    SpringBoot项目Web拦截器使用的多种方式

    在Spring Boot应用中,Web拦截器(Interceptor)是一种用于在请求处理的不同阶段执行自定义逻辑的机制,下面给大家介绍SpringBoot项目Web拦截器使用的多种方式,感兴趣的朋友一起看看吧
    2025-05-05
  • 浅谈Spring IoC容器的依赖注入原理

    浅谈Spring IoC容器的依赖注入原理

    这篇文章主要介绍了浅谈Spring IoC容器的依赖注入原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Java两个集合取差集4种方式举例

    Java两个集合取差集4种方式举例

    在Java 编程中,经常需要对集合进行一些操作,比如取两个集合的交集、并集和差集,下面这篇文章主要给大家介绍了关于Java两个集合取差集的4种方式,需要的朋友可以参考下
    2024-08-08
  • Java Stopwatch类,性能与时间计时器案例详解

    Java Stopwatch类,性能与时间计时器案例详解

    这篇文章主要介绍了Java Stopwatch类,性能与时间计时器案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • SpringBoot项目集成Swagger和swagger-bootstrap-ui及常用注解解读

    SpringBoot项目集成Swagger和swagger-bootstrap-ui及常用注解解读

    这篇文章主要介绍了SpringBoot项目集成Swagger和swagger-bootstrap-ui及常用注解解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Java类加载器ClassLoader的使用详解

    Java类加载器ClassLoader的使用详解

    类加载器负责读取Java字节代码,并转换成java.lang.Class类的一个实例的代码模块。本文主要和大家聊聊JVM类加载器ClassLoader的使用,需要的可以了解一下
    2022-12-12

最新评论