Java Hibernate 之連線池詳解
Hibernate支援第三方的連線池,官方推薦的連線池是C3P0,Proxool,以及DBCP。在配置連線池時需要注意的有三點:
一、Apche的DBCP在Hibernate2中受支援,但在Hibernate3中已經不再推薦使用,官方的解釋是這個連線池存在缺陷。如果你因為某種原因需要在Hibernate3中使用DBCP,建議採用JNDI方式。
二、預設情況下(即沒有配置連線池的情況下),Hibernate會採用內建的連線池。但這個連線池效能不佳,且存在諸多BUG(筆者就曾在Mysql環境下被八小時連線懸空問題困擾過),因此官方也只是建議僅在開發環境下使用。
三、Hibernate2和Hibernate3的名稱空間有所變化。例如,配置C3P0時的provider_class有Hibernate2環境下使用net.sf.hibernate.connection.C3P0ConnectionProvider,在Hibernate3環境下使用org.hibernate.connection.C3P0ConnectionProvider。
下面是Hibernate環境下幾種常見的連線池配置:
1.Hibernate預設連線池
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory > <!—JDBC驅動程式--> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 連線資料庫的URL--> <property name="connection.url"> jdbc:mysql://localhost:3306/schoolproject </property> <property name="connection.useUnicode">true</property> <property name="connection.characterEncoding">UTF-8</property> <!--連線的登入名--> <property name="connection.username">root</property> <!—登入密碼--> <property name="connection.password"></property> <!--是否將執行期生成的SQL輸出到日誌以供除錯--> <property name="show_sql">true</property> <!--指定連線的語言--> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!--對映Student這個資源--> <mapping resource="com/wqbi/model/pojo/student.hbm.xml" /> </session-factory> </hibernate-configuration>
2.C3P0連線配置
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory > <!—JDBC驅動程式--> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 連線資料庫的URL--> <property name="connection.url"> jdbc:mysql://localhost:3306/schoolproject </property> <property name="connection.useUnicode">true</property> <property name="connection.characterEncoding">UTF-8</property> <!--連線的登入名--> <property name="connection.username">root</property> <!--登入密碼--> <property name="connection.password"></property> <!-- C3P0連線池設定--> <p <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider </property> <property name="hibernate.c3p0.max_size">20</property> <property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.timeout">120</property> <property name="hibernate.c3p0.max_statements">100</property> <property name="hibernate.c3p0.idle_test_period">120</property> <property name="hibernate.c3p0.acquire_increment">2</property> <!--是否將執行期生成的SQL輸出到日誌以供除錯--> <property name="show_sql">true</property> <!--指定連線的語言--> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!--對映Student這個資源--> <mapping resource="com/wqbi/model/pojo/student.hbm.xml" /> </session-factory> </hibernate-configuration>
3.proxool連線池
(1) 先寫proxool的配置檔案,檔名:proxool.xml(一般放在與hibernate.cfg.xml檔案在同一個目錄中)本例配置的是MYSQL資料庫,資料庫的名字為schoolproject
<?xml version="1.0" encoding="UTF-8"?> <!-- the proxool configuration can be embedded within your own application's. Anything outside the "proxool" tag is ignored. --> <something-else-entirely> <proxool> <!--連線池的別名--> <alias>DBPool</alias> <!--proxool只能管理由自己產生的連線--> <driver-url> jdbc:mysql://localhost:3306/schoolproject?useUnicode=true&characterEncoding=UTF8 </driver-url> <!—JDBC驅動程式--> <driver-class>com.mysql.jdbc.Driver</driver-class> <driver-properties> <property name="user" value="root"/> <property name="password" value=""/> </driver-properties> <!-- proxool自動偵察各個連線狀態的時間間隔(毫秒),偵察到空閒的連線就馬上回 收,超時的銷燬--> <house-keeping-sleep-time>90000</house-keeping-sleep-time> <!-- 指因未有空閒連線可以分配而在佇列中等候的最大請求數,超過這個請求數的 使用者連線就不會被接受--> <maximum-new-connections>20</maximum-new-connections> <!-- 最少保持的空閒連線數--> <prototype-count>5</prototype-count> <!-- 允許最大連線數,超過了這個連線,再有請求時,就排在佇列中等候,最大的 等待請求數由maximum-new-connections決定--> <maximum-connection-count>100</maximum-connection-count> <!-- 最小連線數--> <minimum-connection-count>10</minimum-connection-count> </proxool> </something-else-entirely>
(2)配置hibernate.cfg.xml檔案
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory > <property name="hibernate.connection.provider_class"> org.hibernate.connection.ProxoolConnectionProvider </property> <property name="hibernate.proxool.pool_alias">DBPool</property> <property name="hibernate.proxool.xml">proxoolconf.xml</property> <!--是否將執行期生成的SQL輸出到日誌以供除錯--> <property name="show_sql">true</property> <!--指定連線的語言--> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!--對映Student這個資源--> <mapping resource="com/wqbi/model/pojo/student.hbm.xml" /> </session-factory> </hibernate-configuration>
- hibernate.connection.provider_class定義Hibernate的連線載入類,這裡Proxool連線池是用這個,不同的連線池有不同的載入類,可以查閱Hibernate文件獲取相關資訊
- hibernate.proxool.pool_alias這裡就是用我們上面提到的連線池的別名
- hibernate.proxool.xml是向Hibernate宣告連線池的配置檔案位置,可以用相對或絕對路徑,用相對路徑時要注意一定在要Path範圍內!不然會丟擲異常。
- dialect是宣告SQL語句的方言
- show_sql定義是否顯示Hibernate生成的SQL語言,一般在除錯階段設為true,完成後再改成false,這樣有利於除錯。
- <mapping >資原始檔對映
相關文章
- 連線池和連線數詳解
- Hibernate【查詢、連線池、逆向工程】
- 401、Java框架55 -【Hibernate - C3P0連線池】 2020.10.29Java框架
- 資料庫連線池技術詳解資料庫
- Java同步之執行緒池詳解Java執行緒
- GaussDB(DWS)叢集通訊:詳解pooler連線池
- hibernate詳解
- Java篇-DBUtils與連線池Java
- Spring系列之HikariCP連線池Spring
- 【JDBC】java連線池模擬測試 連線oracleJDBCJavaOracle
- springboot之Druid連線池講解+mybatis整合+PageHelper整合Spring BootUIMyBatis
- hibernate詳解一
- java操作redis叢集連線池JavaRedis
- 連線池
- Java執行緒池詳解Java執行緒
- Java 執行緒池詳解Java執行緒
- JDBC 連線詳解JDBC
- Hikari連線池原始碼解讀原始碼
- Java Druid資料庫連線池+SpringJDBCJavaUI資料庫SpringJDBC
- Hibernate-ORM:13.Hibernate中的連線查詢ORM
- django連線池Django
- HTTP連線池HTTP
- Java 客戶端 Jedis和JedisPool 連線池Java客戶端
- Java GenericObjectPool 物件池化技術--SpringBoot sftp 連線池工具類JavaObject物件Spring BootFTP
- JAVA之長連線、短連線和心跳包Java
- Http持久連線與HttpClient連線池HTTPclient
- [轉帖]HikariCP連線池引數解釋
- 如何在Hibernate/JPA中配置具有兩個連線池的兩個資料來源
- ElasticSearch連線池建立Elasticsearch
- 自定義連線池
- oracle連線查詢詳解Oracle
- Java之BigDecimal詳解JavaDecimal
- Java之Super詳解Java
- Java 之 volatile 詳解Java
- 資料庫連線池-Druid資料庫連線池原始碼解析資料庫UI原始碼
- Spring系列之整合Druid連線池及監控配置SpringUI
- go 語言連線池Go
- Golang SQL連線池梳理GolangSQL
- Tomcat 的 JDBC 連線池TomcatJDBC