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), 然后對該鏈接進行處理並返回

   

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM