CSDN博客

img remote_roamer

Hibernate中使用2级缓存

发表于2008/9/30 6:30:00  1262人阅读

分类: Hibernate + Spring

  1. 在hibernate.cfg.xml中加入缓存支持
    1. <prop key="hibernate.cache.use_query_cache">true</prop>
    2. <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>

  2. 在src目录下的ehcache.xml中配置如下信息
    1. <ehcache>
    2.     <!-- 设置缓存文件 .data 的创建路径。
    3.          如果该路径是 Java 系统参数,当前虚拟机会重新赋值。
    4.          下面的参数这样解释:
    5.          user.home – 用户主目录
    6.          user.dir      – 用户当前工作目录
    7.          java.io.tmpdir – 默认临时文件路径 -->
    8.     <diskStore path="user.home/alcor/hibernate" />

    9.     <!--上面的设置将会在用户的home目录下产生alcor/hibernate的目录,目录下有以配置的cache的名称命名的.data文件-->         
    10.     <!-- 缺省缓存配置。CacheManager 会把这些配置应用到程序中。
    11.         下列属性是 defaultCache 必须的:
    12.         maxInMemory           - 设定内存中创建对象的最大值。
    13.         eternal                        - 设置元素(译注:内存中对象)是否永久驻留。如果是,将忽略超
    14.                                               时限制且元素永不消亡。
    15.         timeToIdleSeconds  - 设置某个元素消亡前的停顿时间。
    16.                                               也就是在一个元素消亡之前,两次访问时间的最大时间间隔值。
    17.                                               这只能在元素不是永久驻留时有效(译注:如果对象永恒不灭,则
    18.                                               设置该属性也无用)。
    19.                                               如果该值是 0 就意味着元素可以停顿无穷长的时间。
    20.         timeToLiveSeconds - 为元素设置消亡前的生存时间。
    21.                                                也就是一个元素从构建到消亡的最大时间间隔值。
    22.                                                这只能在元素不是永久驻留时有效。
    23.         overflowToDisk        - 设置当内存中缓存达到 maxInMemory 限制时元素是否可写到磁盘
    24.                                                上。
    25.     -->
    26.     <cache name="org.hibernate.cache.StandardQueryCache"
    27.         maxElementsInMemory="10000"
    28.         eternal="false"
    29.         timeToIdleSeconds="300"
    30.         timeToLiveSeconds="4200"
    31.         overflowToDisk="true"
    32.         />
    33.     <!-- Sample cache named sampleCache2
    34.         This cache contains 1000 elements. Elements will always be held in memory.
    35.         They are not expired. -->
    36.     <cache name="org.hibernate.cache.UpdateTimestampsCache"
    37.         maxElementsInMemory="5000"
    38.         eternal="true"
    39.         timeToIdleSeconds="0"
    40.         timeToLiveSeconds="0"
    41.         overflowToDisk="false"
    42.         />
    43.         
    44.     <defaultCache maxElementsInMemory="10000" eternal="false" overflowToDisk="true" timeToIdleSeconds="120"
    45.         timeToLiveSeconds="120" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" />
    46.     
    47.     <cache name="menuCache" maxElementsInMemory="10000" eternal="true" overflowToDisk="true" />
    48.     
    49.     <!-- See http://ehcache.sourceforge.net/documentation/#mozTocId258426 for how to configure caching for your objects -->
    50. </ehcache>


  3. 将自己的缓存model加进ehcache.xml里
    使用jpa注释的方式:
    1. package com.alcor.web.hibernate;
    2. import java.util.HashSet;
    3. import java.util.Set;
    4. import javax.persistence.CascadeType;
    5. import javax.persistence.Column;
    6. import javax.persistence.Entity;
    7. import javax.persistence.FetchType;
    8. import javax.persistence.Id;
    9. import javax.persistence.OneToMany;
    10. import javax.persistence.Table;
    11. import org.hibernate.annotations.Cache;
    12. import org.hibernate.annotations.CacheConcurrencyStrategy;
    13. /**
    14.  * AlcorTCountries entity. @author MyEclipse Persistence Tools
    15.  */
    16. @Entity
    17. @Cache(usage = CacheConcurrencyStrategy.READ_ONLY)  
    18. @Table(name = "alcor_t_countries", catalog = "alcorweb")
    19. public class AlcorTCountries implements java.io.Serializable {
    20.    
    21.     // Fields
    22.     private String iso2;
    23.     private String iso3;
    24.     private short isono;
    25.     private String country;
    26.     private String region;
    27.     private String currency;
    28.     private String currencyCode;
    29.     private Set<AlcorTProvinces> alcorTProvinceses = new HashSet<AlcorTProvinces>(
    30.             0);
    31.     // Constructors
    32.     /** default constructor */
    33.     public AlcorTCountries() {
    34.     }
    35.     /** minimal constructor */
    36.     public AlcorTCountries(String iso2, String iso3, short isono, String country) {
    37.         this.iso2 = iso2;
    38.         this.iso3 = iso3;
    39.         this.isono = isono;
    40.         this.country = country;
    41.     }
    42.     /** full constructor */
    43.     public AlcorTCountries(String iso2, String iso3, short isono,
    44.             String country, String region, String currency,
    45.             String currencyCode, Set<AlcorTProvinces> alcorTProvinceses) {
    46.         this.iso2 = iso2;
    47.         this.iso3 = iso3;
    48.         this.isono = isono;
    49.         this.country = country;
    50.         this.region = region;
    51.         this.currency = currency;
    52.         this.currencyCode = currencyCode;
    53.         this.alcorTProvinceses = alcorTProvinceses;
    54.     }
    55.     // Property accessors
    56.     @Id
    57.     @Column(name = "ISO2", unique = true, nullable = false, length = 2)
    58.     public String getIso2() {
    59.         return this.iso2;
    60.     }
    61.     public void setIso2(String iso2) {
    62.         this.iso2 = iso2;
    63.     }
    64.     @Column(name = "ISO3", nullable = false, length = 3)
    65.     public String getIso3() {
    66.         return this.iso3;
    67.     }
    68.     public void setIso3(String iso3) {
    69.         this.iso3 = iso3;
    70.     }
    71.     @Column(name = "ISONo", nullable = false)
    72.     public short getIsono() {
    73.         return this.isono;
    74.     }
    75.     public void setIsono(short isono) {
    76.         this.isono = isono;
    77.     }
    78.     @Column(name = "Country", nullable = false, length = 100)
    79.     public String getCountry() {
    80.         return this.country;
    81.     }
    82.     public void setCountry(String country) {
    83.         this.country = country;
    84.     }
    85.     @Column(name = "Region", length = 100)
    86.     public String getRegion() {
    87.         return this.region;
    88.     }
    89.     public void setRegion(String region) {
    90.         this.region = region;
    91.     }
    92.     @Column(name = "Currency", length = 100)
    93.     public String getCurrency() {
    94.         return this.currency;
    95.     }
    96.     public void setCurrency(String currency) {
    97.         this.currency = currency;
    98.     }
    99.     @Column(name = "CurrencyCode", length = 3)
    100.     public String getCurrencyCode() {
    101.         return this.currencyCode;
    102.     }
    103.     public void setCurrencyCode(String currencyCode) {
    104.         this.currencyCode = currencyCode;
    105.     }
    106.     @Cache(usage = CacheConcurrencyStrategy.READ_ONLY) 
    107.     @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "alcorTCountries")
    108.     public Set<AlcorTProvinces> getAlcorTProvinceses() {
    109.         return this.alcorTProvinceses;
    110.     }
    111.     public void setAlcorTProvinceses(Set<AlcorTProvinces> alcorTProvinceses) {
    112.         this.alcorTProvinceses = alcorTProvinceses;
    113.     }
    114. }

    1.  
      1. @Cache(   
      2.     CacheConcurrencyStrategy usage();                 (1)   
      3.     String region() default "";                       (2)   
      4.     String include() default "all";                   (3)   
      5. )  

      (1) usage: the given cache concurrency strategy (NONE, READ_ONLY, NONSTRICT_READ_WRITE, READ_WRITE, TRANSACTIONAL)

      (2) region (optional): the cache region (default to the fqcn of the class or the fq role name of the collection)

      (3) include (optional): all to include all properties, non-lazy to only include non lazy properties (default all).


  4. 启动Tomcat,如发现如下错误

Could not find configuration [org.hibernate.cache.UpdateTimestampsCache]; using defaults.
Could not find configuration [org.hibernate.cache.StandardQueryCache]; using defaults.

去安装第二步中的缺省模块。

0 0

相关博文

我的热门文章

img
取 消
img