zoukankan      html  css  js  c++  java
  • Mybatis中的连接池

    Mybatis中DataSource的存取

    MyBatis是通过工厂模式来创建数据源DataSource对象的,MyBatis定义了抽象的工厂接口:org.apache.ibatis.datasource.DataSourceFactory,通过其getDataSource()方法返回数据源DataSource。

    MyBatis创建了DataSource实例后,会将其放到Configuration对象内的Environment对象中, 供以后使用。

    当我们需要创建SqlSession对象并需要执行SQL语句时,这时候MyBatis才会去调用dataSource对象来创建java.sql.Connection对象。

    也就是说,java.sql.Connection对象的创建一直延迟到执行SQL语句的时候。

    连接池:
      我们在实际开发中都会使用连接池。
      因为它可以减少我们获取连接所消耗的时间。
    Mybatis中的连接池
      mybatis连接池提供了3种方式的配置:

        配置的位置:
          主配置文件SqlMapConfig.xml中的dataSource标签,type属性就是表示采用何种连接池方式。

        type属性的取值:
          POOLED

             采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现  

             连接池就是用于存储连接的一个容器

             容器其实就是一个集合对象, 该集合必须是线程安全的, 通能两个线程拿到同一连接 

             该集合还必须实现队列的特性:先进先出

          UNPOOLED

            采用传统的获取连接的方式,虽然也实现Javax.sql.DataSource接口,但是并没有使用池的思想。

          JNDI

            采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不一样。

            注意:如果不是web或者maven的war工程,是不能使用的。

            若使用tomcat服务器,采用的连接池是dbcp连接池

       使用POOLED与UNPOOLED日志对比

          

       使用UNPOOLED方式时: 加载驱动 创建一个新的连接 返回该连接

      查看源码UnpooledDataSource.java  

      

      使用POOLED方式时:  要保证线程安全

      如果  空闲池  还有连接   的话直接拿一个出来用, 

      如果  空闲池  没有可用的连接 ,  会查看  活动池中的连接  是否已经达到  最大数量

        如果  活动池中的连接  没有  达到最大数量, 会创建一个新的连接

        如果活动池中的连接已经达到最大数量, 会判断活动池中哪个是最先进来的(Oldest), 然后对该链接进行处理并返回

       

      

  • 相关阅读:
    461. Hamming Distance
    342. Power of Four
    326. Power of Three
    368. Largest Divisible Subset java solutions
    95. Unique Binary Search Trees II java solutions
    303. Range Sum Query
    160. Intersection of Two Linked Lists java solutions
    88. Merge Sorted Array java solutions
    67. Add Binary java solutions
    14. Longest Common Prefix java solutions
  • 原文地址:https://www.cnblogs.com/mkl7/p/10745912.html
Copyright © 2011-2022 走看看