美文网首页
Spring、Mybatis、数据库连接池之间的关系

Spring、Mybatis、数据库连接池之间的关系

作者: 莫失莫忘X3 | 来源:发表于2021-02-23 17:10 被阅读0次
  1. 数据库连接池统一在javax.sql.DataSource#getConnection()的实现类中实现

Druid的连接池在com.alibaba.druid.pool.DruidDataSource#getConnection()中的实现


image.png
  1. Spring中通过javax.sql.DataSource#getConnection()的实现来获取数据库连接,所以如果是Druid连接池,则通过该方法从池中获取连接
  2. Spring事务管理中是通过org.springframework.jdbc.datasource.DataSourceUtils#getConnection()方法来获取数据库连接的,该方法保证了同一个线程上获取到是同一个connection

注意: 同一次请求,多次调用dataSource.getConnection()会取到不同的connection,所以操作事务时,需使用DataSourceUtils.getConnection(dataSource)方式获取连接

  1. org.springframework.jdbc.datasource.DataSourceUtils底层获取connection的逻辑:

判断是否开启事务,若开启事务则调用org.springframework.transaction.support.TransactionSynchronizationManager#bindResource()方法将当前线程与一个事务绑定,采用的方式就是ThreadLocal

  1. Mybatis内部获取数据库连接也是通过org.springframework.jdbc.datasource.DataSourceUtils#getConnection()获取

相关文章

网友评论

      本文标题:Spring、Mybatis、数据库连接池之间的关系

      本文链接:https://www.haomeiwen.com/subject/pqxdfltx.html