本文實(shí)例講述了擴(kuò)展Hibernate使用自定義數(shù)據(jù)庫(kù)連接池的方法。分享給大家供大家參考,具體如下:
在Hibernate的過(guò)程中往往碰到這樣的問(wèn)題:我們現(xiàn)成的產(chǎn)品本來(lái)已使用自有的數(shù)據(jù)庫(kù)連接池,同時(shí)使用Hibernate的話在Hibernate配置中也得配置數(shù)據(jù)庫(kù)連接信息,這樣就需要在兩個(gè)地方維護(hù)數(shù)據(jù)庫(kù)連接信息,維護(hù)起來(lái)感覺(jué)相當(dāng)別扭。
由于我們不是在產(chǎn)品剛開(kāi)始開(kāi)發(fā)就加入Hibernate的,所以不合適讓產(chǎn)品直接使用Hibernate的連接池,只好讓Hibernate來(lái)使用產(chǎn)品自有的連接池,還好Hibernate已提供了連接池的擴(kuò)展接口:ConnectionProvider。
Hibernate本身是通過(guò)ConnectionProvider接口來(lái)實(shí)現(xiàn)管理數(shù)據(jù)庫(kù)連接的。例如其自帶的C3P0ConnectionProvider,ProxoolConnectionProvider等,我們編寫(xiě)一個(gè)實(shí)現(xiàn)ConnectionProvider接口的類,在Hibernate的配置文件中將相關(guān)參數(shù)改成該類就OK,相關(guān)代碼如下:
hibernate.cfg.xml中用以下代碼替代之前的數(shù)據(jù)庫(kù)連接信息配置:
1
2
3
4
|
<!-- 自定義-使用NMS產(chǎn)品的連接池 --> < property name = "hibernate.connection.provider_class" > com.shine.sourcedesk.jbpm.NmsConnectionProvider </ property > |
實(shí)現(xiàn)ConnectionManager接口的類:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
package com.shine.sourcedesk.jbpm; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import org.hibernate.HibernateException; import org.hibernate.connection.ConnectionProvider; import com.shine.framework.jdbc.ConnectionManager; /** * 自定義Hibernate連接池,讓Hibernate使用產(chǎn)品的ConnectionManager * @author JiangKunpeng * */ public class NmsConnectionProvider implements ConnectionProvider{ @Override public void close() throws HibernateException { } @Override public void closeConnection(Connection connection) throws SQLException { //關(guān)閉連接 ConnectionManager.close(connection); } @Override public void configure(Properties properties) throws HibernateException { } @Override public Connection getConnection() throws SQLException { //使用產(chǎn)品的數(shù)據(jù)庫(kù)連接池獲取連接 return ConnectionManager.getConnection(); } @Override public boolean supportsAggressiveRelease() { return false ; } |
希望本文所述對(duì)大家基于Hibernate框架的Java程序設(shè)計(jì)有所幫助。