EhCache构建Hibernate二级缓存

1、首先设置EhCache,建立配置文件ehcache.XML,默认的位置在class-path,可以放到你的src目录下:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
       <diskStore path="java.io.tmpdir" />
       <cache name="cache1"
            maxElementsInMemory="10000"<!-- 缓存最大数目 -->
          eternal="false"                      <!-- 缓存是否持久 -->
         overflowToDisk="true" <!-- 是否保存到磁盘,当系统当机时-->  
         timeToIdleSeconds="300"  <!-- 当缓存闲置n秒后销毁 -->
         timeToLiveSeconds="500"  <!-- 当缓存存活n秒后销毁-->
     memoryStoreEvictionPolicy="LRU"  <!-- 最近最少使用策略-->
      />
		
</ehcache>

 2、在Hibernate配置文件中设置:

 <prop key="hibernate.show_sql">true</prop>
    <prop key="hibernate.jdbc.batch_size">100</prop>
    <prop key="hibernate.jdbc.fetch_size">50</prop>
    <prop key="hibernate.cache.use_second_level_cache">
     true
    </prop>
    <prop key="hibernate.cache.use_query_cache">true</prop>
    <prop key="hibernate.cache.provider_class">
     org.hibernate.cache.EhCacheProvider
    </prop>
    <prop key="net.sf.ehcache.configurationResourceName">
     classpath:ehcache.xml
    </prop>

  3、在Hbm文件中<class>首行下添加 

  <cache usage="read-only" region="cache1"/>

 4使用spring模板时加

<bean id="hibernateTemplate" 
class="org.springframework.orm.hibernate3.HibernateTemplate"> 
<property name="sessionFactory"> 
<ref bean="sessionFactory" /> 
</property> 
<property name="cacheQueries"> 
<value>true</value> 
</property> 
</bean> 

 

如果不设置“查询缓存”,那么hibernate只会缓存使用load()方法获得的单个持久化对象,如果想缓存使用findall()、list()、Iterator()、createCriteria()、createQuery()等方法获得的数据结果集的话,就需要设置
hibernate.cache.use_query_cache true 才行
<prop key="hibernate.cache.use_query_cache">true</prop>

ehcache不支持transactional,其他三种可以支持。
read-only:无需修改, 那么就可以对其进行只读 缓存,注意,在此策略下,如果直接修改数据库,即使能够看到前台显示效果,但是将对象修改至cache中会报error,cache不会发生作用。另:删除记录会报错,因为不能在read-only模式的对象从cache中删除。
read-write:需要更新数据,那么使用读/写缓存 比较合适,前提:数据库不可以为serializable transaction isolation level(序列化事务隔离级别)
nonstrict-read-write:只偶尔需要更新数据(也就是说,两个事务同时更新同一记录的情况很不常见),也不需要十分严格的事务隔离,那么比较适合使用非严格读/写缓存策略。

  

你可能感兴趣的:(spring,Hibernate,bean,cache,jdbc)