hibernate4.3.6二級快取配置方法
hibernate快取可以分為一級快取和二級快取,一級快取就是session級別的,只能為單個session共享,這是hibernate自己帶的無需我們配置就可以使用。
sessionFactory快取可以根據功能和目的的不同劃分為內建快取和外接快取:
1、sessionFactory內建快取中存放了對映元資料和預定義SQL語句,對映元資料是對映檔案中資料的副本,而預定義SQL語句是在Hibernate初始化階段根據對映元資料推到出來的。內建快取是隻讀的,應用程式不能修改對映元資料和預定義的SQL語句,因此,sessionFactory不需要進行內建快取與對映檔案的同步。
2、外接快取是一個可配置的外掛,在預設情況下,sessionFactory不會啟用這個外掛,外接快取的資料是資料庫資料的副本,外接快取的介質是記憶體或者硬碟,sessionFactory的外接快取也被成為hibernate的二級快取。
Hibernate的快取都是以ID為key的map來實現對物件的快取,Hibernate的二級快取作用級別是sessionFactory,可以被所用session所共享。
二級快取工作原來:
1、在執行各種查詢條件時,如果所獲得的結果集是實體物件的集合,那麼就會把所有對的物件根據ID放入到二級快取中。
2、當Hibernate根據ID訪問資料物件的時候,首先會從session的一級快取中找,如果找不到並且配置了二級快取,就會從二級快取中找,如果還找不到就查資料庫。
在預設情況下Hibernate會使用EHCache作為二級快取元件,但是可以通過hibernate.cache.provider_class屬性制定其他的快取策略。
二級快取配置步驟:
1、在hibernate.cfg.xml檔案中配置二級快取相關配置
<!-- 配置Hibernate的二級快取, -->
<!-- 開啟查詢快取 -->
<property name="cache.use_query_cache">true</property>
<!-- 開啟二級快取 -->
<property name="cache.use_second_level_cache">true</property>
<property name="cache.use_structured_entries">true</property>
<property name="cache.region.factory_class">org.hibernate.cache.EhCacheRegionFactory</property>
<property name="net.sf.ehcache.configurationResourceName">ehcache.xml</property>
2、在hibernate.cfg.xml統計目錄下建立eacache.xml
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../main/config/ehcache.xsd" name="tc"
updateCheck="false">
<!--maxElementsInMemory 快取最大個數
eternal:物件是否永久有效,一但設定了,timeout將不起作用
timeToIdleSeconds:設定物件在失效前的允許閒置時間(單位:秒)。僅當eternal=false物件不是永久有效時使用,可選屬性,預設值是0,也就是可閒置時間無窮 大。
timeToLiveSeconds:設定物件在失效前允許存活時間(單位:秒)。最大時間介於建立時間和失效時間之間。僅當eternal=false物件不是永久有效時使用,預設是0.,也就是物件存活時間無窮大。
overflowToDisk:當記憶體中物件數量達到maxElementsInMemory時,Ehcache將會物件寫到磁碟中。
diskSpoolBufferSizeMB:這個引數設定DiskStore(磁碟快取)的快取區大小。預設是30MB。每個Cache都應該有自己的一個緩衝區。
maxElementsOnDisk:硬碟最大快取個數。
diskPersistent:是否快取虛擬機器重啟期資料 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
diskExpiryThreadIntervalSeconds:磁碟失效執行緒執行時間間隔,預設是120秒。
memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時,Ehcache將會根據指定的策略去清理記憶體。預設策略是LRU(最近最少使用)。你可以設定為FIFO(先進先出)或是LFU(較少使用)。
clearOnFlush:記憶體數量最大時是否清除
-->
<defaultCache
maxElementsInMemory="1000"
eternal="true"
overflowToDisk="false">
</defaultCache>
</ehcache>
3、在對映檔案中加入<!-- 給具體實體類使用二級快取--><cache usage="read-only"/>
<class name="Person" table="person">
<!-- 給具體實體類使用二級快取-->
<cache usage="read-only"/>
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
<property name="team" />
<property name="age" />
<property name="position" />
<property name="worth" />
</class>
二級快取配置 成功,注意:在配置過程中可能會出現各種各樣的錯誤,出現錯誤首先檢查你的hibernate包的版本是否一致,如果配置不成功那麼就換個版本試試,所有問題都是可以解決的。