一句話,Spring對Hibernate的整合,是在applicationContext.xml中配置sessionFactory來實現的,其中sessionFactory中要裝配dataSource。下面就詳細介紹dataSource Bean的配置。
SessionFactory接口負責初始化Hibernate。它充當數據存儲源的代理,並負責創建Session對象。這里用到了工廠模式。需要注意的是SessionFactory並不是輕量級的,因為一般情況下,一個項目通常只需要一個SessionFactory就夠,當需要操作多個數據庫時,可以為每個數據庫指定一個SessionFactory。實際上它的設計者的意圖是讓它能在整個應用中共享。 SessionFactory在hibernate中實際起到了一個緩沖區的作用,它緩沖了Hibernate自動生成的SQL語句和一些其它的映射數據,還緩沖了一些將來有可能重復利用的數據。session是由sessionfactory來創建,可以創建很多session。Session接口對於Hibernate 開發人員來說是一個最重要的接口。 在Hibernate的設計者的頭腦中,他們將session看作介於數據連接與事務管理一種中間接口。我們可以將session想象成一個持久對象的緩沖區,Hibernate能檢測到這些持久對象的改變,並及時刷新數據庫。我們有時也稱Session是一個持久層管理器,因為它包含這一些持久層相關的操作,諸如存儲持久對象至數據庫,以及從數據庫從獲得它們。
datasource數據源是注入給sessionfactory的,然后關聯到session中。先上代碼(比較齊全的屬性):
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${driverClassName}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> <!-- 連接初始值,連接池啟動時創建的連接數量的初始值 --> <property name="initialSize" value="${initialSize}" /> <!-- 連接池的最大值,同一時間可以從池分配的最多連接數量,0時無限制 --> <property name="maxActive" value="${maxActive}" /> <!-- 最大空閑值.當經過一個高峰時間后,連接池可以慢慢將已經用不到的連接慢慢釋放一部分,一直減少到maxIdle為止 ,0時無限制--> <property name="maxIdle" value="${maxIdle}" /> <!-- 最小空閑值.當空閑的連接數少於閥值時,連接池就會預申請去一些連接,以免洪峰來時來不及申請 --> <property name="minIdle" value="${minIdle}" /> <!-- 是否對已備語句進行池管理(布爾值),是否對PreparedStatement進行緩存 --> <property name="poolPreparedStatements" value="true" /> <!-- 是否對sql進行自動提交 --> <property name="defaultAutoCommit" value="true" /> </bean>
1.Bean的id為dataSource,對應的java類是BasicDataSource,這個類適用於配置基本類型的數據庫連接,如果要想進行多數據源,那么該Bean對應的java類就得用DynamicDataSource。
2.destroy-method,表示當該連接銷毀時候,會調用BasicDataSource類中的close方法。
3.driverClassName,url,username,password都是基本配置,這些屬性的value值是通過外部的屬性配置文件引入,具體怎么引入請參 見
http://blog.csdn.net/dreamrealised/article/details/9123199中的第三點propertyConfigurer。
4.接下來的屬性與數據庫連接池有關,數據庫連接池的有關基礎知識請參見http://blog.csdn.net/dreamrealised/article/details/9127563
1)initialSize,連接初始值,連接池啟動時創建的連接數量的初始值
2)maxActive,連接池的最大值,同一時間可以從池分配的最多連接數量,0時無限制
3)maxIdle,最大空閑值.當經過一個高峰時間后,連接池可以慢慢將已經用不到的連接慢慢釋放一部分,一直減少到maxIdle為止 ,0時無限制
4)minIdle,最小空閑值.當空閑的連接數少於閥值時,連接池就會預申請去一些連接,以免洪峰來時來不及申請
5)poolPreparedStatements,是否對已備語句進行池管理(布爾值),是否對PreparedStatement進行緩存
6)defaultAutoCommit,是否對sql進行自動提交,進行事務管理的時候往往要關閉jdbc的自動提交功能,事務管理詳見
http://blog.csdn.net/dreamrealised/article/details/9123173
.配置動態數據源
將DynamicDataSource Bean加入到Spring的上下文xml配置文件中去,同時配置DynamicDataSource的targetDataSources(多數據源目標)屬性的Map映射。
<bean id="dynamicDataSource" class="datasource.DynamicDataSource" >
<property name="targetDataSources">
<map>
<entry value-ref="dataSourceFrom" key="dataSourceFrom"></entry>
<entry value-ref="dataSourceTo" key="dataSourceTo"></entry>
</map>
</property>
<property name="defaultTargetDataSource" ref="dataSourceFrom" />
</bean>
在示例上名稱為dataSource這個數據源被配置為動態數據源,它的targetDataSources屬性中可以配置其默認管理的數據源。我們將平台原有基礎操作的數據源的名稱修改為datasource1並委托給該數據源默認持有管理。