hibernate4.3.6二级缓存配置方法

来源:互联网 发布:网络钟点工招聘 编辑:程序博客网 时间:2024/04/19 19:18

     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包的版本是否一致,如果配置不成功那么就换个版本试试,所有问题都是可以解决的。

0 0
原创粉丝点击