MyBatis連線池的實現原理分析

2021-10-23 01:26:19 字數 4108 閱讀 7822

連線池是什麼:儲存連線的容器

解決了什麼問題 :如果沒有連線池,那麼每次都執行sql語句都會建立connection連線,會浪費時間。影響 程式的效能。

提前建立一些連線,儲存到連線池中,使用的時候從連線池中獲取連線即可。

常用的連線池

1. c3p0連線池

2. dbcp連線池

3. druid連線池(阿里)

連線池有歸還的操作,已經對close方法進行了增強,原來是銷毀,現在是歸還操作。

mybatis內建了連線池技術,datasource標籤的type屬性有3個取值

pooled使用連線池

unpooled 不使用連線池(這個了解即可,一般是不使用的)

jndi 使用jndi實現連線池(麻煩,不推薦使用)

在解析配置檔案的時候,建立datasource物件,存入到environment物件中。

當執行sql語句的時候,準備從datasource物件中獲取鏈結。

pooleddatasource原始碼中的2個方法用來獲取連線和歸還連線

(1)、popconnection方法用來獲取鏈結

先判斷空閒的連線池中是否存在連線,如果存在,則獲取乙個連線使用。

檢視活動狀態的pooledconnection池activeconnections是否已滿;如果沒有滿,則 建立乙個新的 pooledconnection物件,然後放到activeconnections池中,然後返回此pooledconnection對 象。

看最先進入activeconnections池中的pooledconnection物件是否已經過期:如果已 經過期,從 activeconnections池中移除此物件,然後建立乙個新的pooledconnection物件,新增 到activeconnections中,然後將此物件返回。

(2)、 pushconnection方法用來歸還鏈結

原始碼中規定的活動連線池中的最大連線數是10:

protected int poolmaximumactiveconnections =

10;

mybatis連線池原理

補充說明 1.pooleddatasourc中包含乙個poolstate物件,這個物件包含了兩個集合,idleconnections 儲存連線池中空閒的執行緒 activeconnections 儲存連線池中活動的執行緒 2.建立新執行緒 pooledconnection conn new pool...

mybatis的連線池 事務

一 連線池 資料庫連線池負責分配,管理,釋放資料庫連線 實際開發中一般都會使用連線池,可以減少獲取連線所消耗的時間 mybatis 中資料來源的配置我們的資料來源配置就是在 sqlmapconfig.xml 檔案中 type pooled name driver value name url val...

連線池原理簡述

資料庫連線的生命週期 讓我看看連線一次資料庫要經歷哪些步驟 用 database driver 開啟乙個連線去連線資料庫 開啟乙個 tcp socket 讀寫資料 資料讀寫完畢 關閉連線 關閉socket 可以看出進行一次資料庫連線是個相當昂貴的操作。沒有連線池的情況 來自部落格 如上圖,如果沒有連...