瞭解資料庫連線池
1.介紹
連線池是事先開啟N個資料庫連線放入池中進行管理的效能最佳化技術。應用程式只需要一個連線,使使用完以後將其放回池中。 當應用程式需要連線時,池中總是保持就緒可用連線。池管理連線生命週期,使得開發人員實際上不需要等待連線的建立過程並過濾掉過時的連線。
連線池機制節省了執行時建立網路連線的昂貴成本,總是在後臺初始化資料庫會話。
2. TOMCAT中的連線池實現
Tomcat中是領先的應用伺服器,Commons DBCP資料來源作為其預設的JNDI資料來源,除非我們明確指定DataSourceFactory,以下是使用方式:
使用Apache Commons DBCP連線池 -
使用 Tomcat JDBC Connection pool :
factory是必需的, 型別應始終為javax.sql.DataSource
DBCP的優點是它可以與許多應用程式或框架一起使用,並且它幾乎能與市場上的所有資料庫一起工作。
3.比較連線池機制
當使用Commons DBCP連線池機制,Tomcat獲取Commons DBCP源(版本取決於Tomcat的版本,例如Tomcat的7.0.27使用Commons DBCP 1.4),並執行包的名稱替換(org.apache.commons - > org.apache.tomcat.dbcp)並構建成Tomcat-dbcp.jar。 這樣做是為了使內部Tomcat JDBC池不會與Commons DBCP類的應用程式使用發生衝突。 這避免了許多潛在的類載入問題。“dbcp”包是關於資料來源管理的。
同樣,Tomcat的JDBC連線池機制(org.apache.tomcat.jdbc.pool.*)是與Commons DBCP資料庫連線池競爭的替代升級實現。 它是一個Tomcat分離出單獨的專案(在Tomcat模組 - > jdbc-pool),它首次配置於Tomcat 7(2011年7月7.0.19開始)。這兩個實現都有優點和缺點,然而Apache Commons DBCP仍然被更普遍使用。
在這兩種情況下,相應的JAR檔案( commons-dbcp.jar 或 tomcat-jdbc.jar)都需要被納入構建路徑。
舊版本的Apache Commons DBCP(即版本1.2)在高負載條件下有一些討厭的執行緒安全問題,使得它不適合被再使用,這就是為什麼重寫Tomcat JDBC連線池原因。
使用Tomcat JDBC連線池也很簡單,對於已經熟悉DBCP的人來說,轉換也是相當簡單的。
4.在HIBERNATE中的連線池
Hibernate使用它的魔法來標識要使用的連線池提供程式 - 基於您配置的屬性。
對於c3p0 -
對於Apache Commons DBCP -
相應的JAR檔案需要位於lib目錄中,手動配置或使用Maven。
我們也可以使用hibernate.connection.provider_class屬性顯式指定連線提供者,但其並不真正需要。
如果我們不配置與Hibernate連線池,則使用預設的,當我們啟動應用程式,在日誌或控制檯輸出中可見-
org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
Hibernate中預設的連線池實現不適合生產使用,因為它的配置限制了。如果您使用應用程式伺服器,則可能希望使用內建池(通常使用JNDI獲取連線)。
使用JNDI配置讓Hibernate使用伺服器的內建池,我們需要將以下屬性設定到Hibernate配置檔案中 -
hibernate.connection.datasource=java:/comp/env/jdbc/TestDB
- 假設TestDB是Tomcat JDBC連線池DataSource的JNDI名稱(參考上面第2節中的程式碼片段)。
如果您不能或不希望使用應用程式伺服器的內建連線池,Hibernate支援其他幾個連線池,例如 -
c3p0
Proxool
Apache的DBCP之後,C3P0是第二個最好的連線池的實現,容易與Hibernate整合,據說能夠提供良好的效能。
連線池是事先開啟N個資料庫連線放入池中進行管理的效能最佳化技術。應用程式只需要一個連線,使使用完以後將其放回池中。 當應用程式需要連線時,池中總是保持就緒可用連線。池管理連線生命週期,使得開發人員實際上不需要等待連線的建立過程並過濾掉過時的連線。
連線池機制節省了執行時建立網路連線的昂貴成本,總是在後臺初始化資料庫會話。
2. TOMCAT中的連線池實現
Tomcat中是領先的應用伺服器,Commons DBCP資料來源作為其預設的JNDI資料來源,除非我們明確指定DataSourceFactory,以下是使用方式:
使用Apache Commons DBCP連線池 -
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/javatest" factory="org.apache.commons.dbcp.BasicDataSourceFactory"/> <p class="indent"> |
使用 Tomcat JDBC Connection pool :
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/javatest" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"/> <p class="indent"> |
factory是必需的, 型別應始終為javax.sql.DataSource
DBCP的優點是它可以與許多應用程式或框架一起使用,並且它幾乎能與市場上的所有資料庫一起工作。
3.比較連線池機制
當使用Commons DBCP連線池機制,Tomcat獲取Commons DBCP源(版本取決於Tomcat的版本,例如Tomcat的7.0.27使用Commons DBCP 1.4),並執行包的名稱替換(org.apache.commons - > org.apache.tomcat.dbcp)並構建成Tomcat-dbcp.jar。 這樣做是為了使內部Tomcat JDBC池不會與Commons DBCP類的應用程式使用發生衝突。 這避免了許多潛在的類載入問題。“dbcp”包是關於資料來源管理的。
同樣,Tomcat的JDBC連線池機制(org.apache.tomcat.jdbc.pool.*)是與Commons DBCP資料庫連線池競爭的替代升級實現。 它是一個Tomcat分離出單獨的專案(在Tomcat模組 - > jdbc-pool),它首次配置於Tomcat 7(2011年7月7.0.19開始)。這兩個實現都有優點和缺點,然而Apache Commons DBCP仍然被更普遍使用。
在這兩種情況下,相應的JAR檔案( commons-dbcp.jar 或 tomcat-jdbc.jar)都需要被納入構建路徑。
舊版本的Apache Commons DBCP(即版本1.2)在高負載條件下有一些討厭的執行緒安全問題,使得它不適合被再使用,這就是為什麼重寫Tomcat JDBC連線池原因。
使用Tomcat JDBC連線池也很簡單,對於已經熟悉DBCP的人來說,轉換也是相當簡單的。
4.在HIBERNATE中的連線池
Hibernate使用它的魔法來標識要使用的連線池提供程式 - 基於您配置的屬性。
對於c3p0 -
<property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.max_size">20</property> <property name="hibernate.c3p0.timeout">300</property> <property name="hibernate.c3p0.max_statements">50</property> <property name="hibernate.c3p0.idle_test_period">3000</property> <p class="indent"> |
對於Apache Commons DBCP -
<property name="hibernate.dbcp.initialSize">8</property> <property name="hibernate.dbcp.maxActive">20</property> <property name="hibernate.dbcp.maxIdle">20</property> <property name="hibernate.dbcp.minIdle">0</property> <p class="indent"> |
相應的JAR檔案需要位於lib目錄中,手動配置或使用Maven。
我們也可以使用hibernate.connection.provider_class屬性顯式指定連線提供者,但其並不真正需要。
<property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property> <property name="hibernate.c3p0.min_size">1</property> <property name="hibernate.c3p0.max_size">19</property> <property name="hibernate.c3p0.timeout">120</property> <property name="hibernate.c3p0.max_statements">10</property> <property name="hibernate.c3p0.idle_test_period">3000</property> <p class="indent"> |
如果我們不配置與Hibernate連線池,則使用預設的,當我們啟動應用程式,在日誌或控制檯輸出中可見-
org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
Hibernate中預設的連線池實現不適合生產使用,因為它的配置限制了。如果您使用應用程式伺服器,則可能希望使用內建池(通常使用JNDI獲取連線)。
使用JNDI配置讓Hibernate使用伺服器的內建池,我們需要將以下屬性設定到Hibernate配置檔案中 -
hibernate.connection.datasource=java:/comp/env/jdbc/TestDB
- 假設TestDB是Tomcat JDBC連線池DataSource的JNDI名稱(參考上面第2節中的程式碼片段)。
如果您不能或不希望使用應用程式伺服器的內建連線池,Hibernate支援其他幾個連線池,例如 -
c3p0
Proxool
Apache的DBCP之後,C3P0是第二個最好的連線池的實現,容易與Hibernate整合,據說能夠提供良好的效能。
相關文章
- 資料庫連線池資料庫
- 《四 資料庫連線池原始碼》手寫資料庫連線池資料庫原始碼
- 資料庫連線池-Druid資料庫連線池原始碼解析資料庫UI原始碼
- 資料庫連線池技術詳解資料庫
- 資料庫連線池原理資料庫
- Proxool資料庫連線池資料庫
- JAVA資料庫連線池Java資料庫
- Flask資料庫連線池Flask資料庫
- 【MySQL】自定義資料庫連線池和開源資料庫連線池的使用MySql資料庫
- python資料庫連線池Python資料庫
- 手寫資料庫連線池資料庫
- 資料庫連線池的理解資料庫
- 資料庫連線池的使用資料庫
- 資料庫連線池淺析資料庫
- WASCE的資料庫連線池資料庫
- JNDI配置資料庫連線池資料庫
- PROXOOL資料庫連線池使用資料庫
- 關於資料庫連線池資料庫
- .net 資料庫連線池配置資料庫
- MySql資料庫連線池專題MySql資料庫
- JavaWeb之事務&資料庫連線池JavaWeb資料庫
- mysql資料庫連線池配置教程MySql資料庫
- Python資料庫連線池DButilsPython資料庫
- 聊聊資料庫連線池 Druid資料庫UI
- JDBC資料庫連線池實現JDBC資料庫
- 資料庫連線池的工作原理資料庫
- tomcat連線池配置,解決資料庫超時Tomcat資料庫
- JDBC、JDBC框架、資料庫事務、資料庫連線池JDBC框架資料庫
- 【ITOO】--SQL資料庫優化:切割、資料庫連線池SQL資料庫優化
- 利用weblogic的POOL(連線池)連線資料庫 (轉)Web資料庫
- 帶你進入資料庫連線池資料庫
- 淺談JDBC和資料庫連線池JDBC資料庫
- java資料庫連線池dbcp的使用Java資料庫
- [求助]資料庫連線池配置問題資料庫
- 請關掉你的資料庫連線!並且請使用資料庫連線池資料庫
- 資料庫連線池的實現及原理資料庫
- druid資料庫連線池的配置類UI資料庫
- 資料庫連線池到底應該設多大?資料庫