ms注解是種流行,,越來(lái)越多的注解,,越來(lái)越多的零配置 1. 首先設(shè)置EhCache,建立配置文件ehcache.xml,,默認(rèn)的位置在class-path,可以放到你的src目錄下: <xml version="1.0" encoding="UTF-8"?> <ehcache> <diskStore path="java.io.tmpdir"/> <defaultCache maxElementsInMemory="10000" eternal="false" overflowToDisk="true" timeToIdleSeconds="300" timeToLiveSeconds="180" diskPersistent="false" diskExpiryThreadIntervalSeconds= "120"/> <ehcache>
2. 在Hibernate配置文件中設(shè)置: <hibernate-configuration> <session-factory> <property name="hibernate.cache.provider_class"> org.hibernate.cache.EhCacheProvider </property> <property name="cache.use_second_level_cache"> true </property> </session-factory> </hibernate-configuration> 此外,,可以把cache.use_second_level_cache設(shè)置為false關(guān)閉所有的hibernate二級(jí)緩存,。但此屬性對(duì)指定<cache>的類缺省為true。 3. 為了使用二級(jí)緩存,,需要在每一個(gè)Hibernate Entity上配置,。 @Entity @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class Forest { ... } @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER) @JoinColumn(name="CUST_ID")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public SortedSet getTickets() {
return tickets;
} @Cache( CacheConcurrencyStrategy usage(); (1) String region() default ""; (2) String include() default "all"; (3) ) (1) usage: 提供緩存對(duì)象的事務(wù)隔離機(jī)制,可選值有以下幾種 (NONE, READ_ONLY, NONSTRICT_READ_WRITE, READ_WRITE, TRANSACTIONAL)
ehcache不支持transactional,,其他三種可以支持,。 但是將對(duì)象修改至cache中會(huì)報(bào)error,,cache不會(huì)發(fā)生作用。另:刪除記錄會(huì)報(bào)錯(cuò),,因?yàn)椴荒茉趓ead-only模式的對(duì)象從cache中刪除,。
read-write:需要更新數(shù)據(jù),那么使用讀/寫緩存 比較合適,,前提:數(shù)據(jù)庫(kù)不可以為serializable transaction isolation level (序列化事務(wù)隔離級(jí)別)
nonstrict-read-write:只偶爾需要更新數(shù)據(jù)(也就是說(shuō),,兩個(gè)事務(wù)同時(shí)更新同一記錄的情況很不常見(jiàn)),也不需要十分嚴(yán)格的事務(wù)隔離,, 那么比較適合使用非嚴(yán)格讀/寫緩存策略,。
(2) region (optional): 指定緩存的區(qū)域,默認(rèn)是類的全限定名,。利用緩存區(qū)域,,可以更精確的指定每個(gè)區(qū)域的緩存超前策略。 如果指定了緩存區(qū)域前綴(在hibernate.cfg.xml中設(shè)置cache.region_prefix屬性為一個(gè)字符串),,則所有的緩存區(qū)域名前將加上這個(gè)前綴,。 hbm文件查找cache方法名的策略: 先查找ehcache.xml中的name的屬性值,如果有個(gè)類是com.yybean.Foo,,則使用ehcache.xml里面配置的name名為com.yybean.Foo的cache,, <cache name="com.yybean.Foo … 如果不存在與類名匹配的cache名稱,則用defaultCache,。
調(diào)試時(shí)候使用log4j的log4j.logger.org.hibernate.cache=debug,更方便看到ehcache的操作過(guò)程,,主要用于調(diào)試過(guò)程,實(shí)際應(yīng)用發(fā)布時(shí)候,,請(qǐng)注釋掉,以免影響性能,。
|
|
來(lái)自: KILLKISS > 《Hibernate》