美文网首页
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