java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > MyBatis  连接池 POOLED

MyBatis 内置连接池 POOLED 详解

作者:思静鱼

MyBatis提供了一个内置的数据库连接池实现POOLED,它是MyBatis自带的一个简单但高效的连接池实现,具有一定的参考价值,感兴趣的可以了解一下

MyBatis 提供了一个内置的数据库连接池实现 POOLED,它是 MyBatis 自带的一个简单但高效的连接池实现。

一、POOLED 连接池基本特性

1. 核心特点

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 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文