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>标签的后面!!