Hibernate+ehcache二级缓存

1、  首先导包ehcache-1.2.3.jar,放在WEB-INF/lib中。

2、  设置ehcache.xml,默认的位置在class-path,可以放在你的src目录下:

<ehcache>

<!--

    <diskStore path="java.io.tmpdir"/> 

    -->

    <diskStore path="e:\\cache"/>

    <defaultCache

            maxElementsInMemory="10000"<!-- 缓存最大数目 -->

            eternal="false"<!-- 缓存是否持久 -->

            timeToIdleSeconds="60"<!-- 当缓存闲置n秒后销毁 -->

            timeToLiveSeconds="60"<!-- 当缓存存活n秒后销毁-->

            overflowToDisk="true"<!-- 是否保存到磁盘,当系统当机时-->

            diskPersistent="false"

            diskExpiryThreadIntervalSeconds="120"          

            />

</ehcache>

3、  在hibernate.cfg.xml中添加如下代码:

<!-- 设置Hibernate的缓存接口类,这个类在Hibernate包中 -->    

<property name="hibernate.cache.provider_class">

           org.hibernate.cache.EhCacheProvider

       </property>

<!-- 是否使用查询缓存 –

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

-->   

<property name="hibernate.cache.use_query_cache">true</property>

4、Hibernate在默认情况下并不会对所有实体对象进行缓存,所以,我们需要指定缓存哪些对象, 在实体对象的映射文件中(相应的<class>标签内部),添加如下配置:   

<cache usage="read-only"/>     

usage="read-only"是“只读”缓存策略。     

注意,这个<cache>标签只能放在<class>标签的内部,而且必须处在<id>标签的前面!这个<cache>标签放在哪些<class>标签下面,就说明会多这些类的对象进行缓存

对于第4步,有一个可选的方案在hibernate.cfg.xml文件中指定哪些类的对象需要缓存,而不需要使用<cache>标签来指定。如在hibernate.cfg.xml中添加如下配置:

<class-cache class="com.andy.pojo.Users" usage="read-only"/>

注意,这个<class-cache>标签必须放在<mapping>标签的后面!!

原文地址:https://www.cnblogs.com/zhouwenwu/p/2336465.html