爲Spring集成的Hibernate配置二級緩存

1、與Session相對的是,SessionFactory也提供了相應的緩存機制。SessionFactory緩存可以依據功能和目的的不同而劃分爲內置緩存和外置緩存。

       SessionFactory的內置緩存中存放了映射元數據和預定義SQL語句,映射元數據是映射文件中數據的副本,而預定義SQL語句是在 Hibernate初始化階段根據映射元數據推導出來的。SessionFactory的內置緩存是隻讀的,應用程序不能修改緩存中的映射元數據和預定義 SQL語句,因此SessionFactory不需要進行內置緩存與映射文件的同步。

       SessionFactory的外置緩存是一個可配置的插件。在默認情況下,SessionFactory不會啓用這個插件。外置緩存的數據是數據庫數據 的副本,外置緩存的介質可以是內存或者硬盤。SessionFactory的外置緩存也被稱爲Hibernate的二級緩存。

2、需要在beans.xml中開啓緩存機制(在sessionFactory配置中添加以下配置):

 <property name="hibernateProperties">
			 <value>
			      hibernate.dialect=org.hibernate.dialect.MySQL5Dialect<!-- 使用的Mysql5的方言 -->
			      hibernate.hbm2ddl.auto=update<!--是否根據映射源數據,根據數據生成表結構  -->
			      hibernate.show_sql=false<!--是否打印出hibernate中的sql語句  -->
			      hibernate.format_sql=false<!-- 是否對其sql語句進行格式化 -->
			      <!--啓用hibernate的外置緩存(二級緩存機制)  -->
			      hibernate.cache.use_second_level_cache=true<!--  開啓hibernate二級緩存機制-->
			      hibernate.cache.use_query_cache=false<!-- 設置爲flase的意思是,該查詢緩存機制其實命中率並不是很高 -->
			      hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider<!--指定緩存機制場景的驅動類  -->
			  </value>
		 </property>

並且引入緩存場景驅動包(我們使用的是ehcache-1.2.3.jar)

3、建立Ehche緩存場景驅動配置文件ehcache.xml(放在類路徑下)

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<diskStore path="D:\cache"/><!-- 緩存的對象存放在哪個硬盤上的路勁下 -->
<!-- 
defaultCache節點爲缺省的緩存策略
maxElementsInMemory內存中最大允許存在的對象數量
eternal設置緩存中的對象是否永遠不過期
overflowToDisk 把溢出的對象存放至硬盤上
timeToIdleSeconds指定緩存對象空閒多長時間就過期,過期的對象會被清除掉
timeToLiveSeconds指定緩存對象的存活時間
diskPersistent當jvm結束時是否持久化對象
diskExpiryThreadIntervalSeconds指定專門用於清除過期對象的監聽線程的輪詢時間
 -->
<defaultCache maxElementsInMemory="1000" eternal="false" overflowToDisk="true"
timeToIdleSeconds="120"
timeToLiveSeconds="180"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="60"/>
</ehcache>

4、之後必須要持久化對象映射文件中配置緩存設置如下所示

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.jxau.ruanjian1201.springWeb1.po">
	<class name="Person" table="person">
	<cache usage="read-write" region="com.jxau.ruanjian1201.springWeb1.po.Person"/>
		<id name="id" type="integer">
			<generator class="native"></generator>
		</id>
		<property name="name" length="20" not-null="true" />
	</class>
</hibernate-mapping>

5、也可以單獨對某個持久化對象設置特定的緩存機制

配置如下:

<cache name="com.jxau.ruanjian1201.springWeb1.po.Person" maxElementsInMemory="1000" eternal="false"
		overflowToDisk="true" timeToIdleSeconds="120" timeToLiveSeconds="180"
		diskPersistent="false" diskExpiryThreadIntervalSeconds="60"/>
上面那個緩存配置是默認的情況下進行。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章