今天学了一个二级缓存的配置,记录下来,以后有用的时候在来查!
1、EHCache插件的配置,配置其自带的配置文件ehcache.xml到src目录下,并且编写ehcache.xml文件
<ehcache>
<!-- 缓存存放路径,这里是默认的,也可以自己定义 -->
<diskStore path="java.io.tmpdir"/>
<!--
maxElementsInMemory:允许缓存可以存储的总记录数
eternal:当前缓存是否永远不过期
timeToIdleSeconds:当前缓存最大闲置时间,超过该时间则销毁缓存
timeToLiveSeconds:设置缓存超时时间,当缓存创建达到该时间就知道销毁
overflowToDisk:当前缓存中的数据达到最大值时,是否把缓存数据写入到本地磁盘
-->
<!--
这是默认缓存,也可以用<cache name="sampleCache1"/>
自定义缓存
-->
<defaultCache
maxElementsInMemory="1"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
/>
</ehcache>
还需要添加两个相应的包
commons-logging-1.0.4.jar、ehcache-1.2.3.jar
2、在Hibernate配置文件中开启ehcache二级缓存管理
<!-- 打开二级缓存 -->
<property name="cache.use_second_level_cache">true</property>
<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
配置测试使用的POJO类
注意:配置的时候一定要到原文件中copy,或者把前配置好的信息copy过来,否则很严重,错误是很难找的
3、在实体类中开启缓存
在<class></class>标签中,在<id/>标签上面加
<cache usage="read-write"/>这个标签
4、测试方法
/**
* 配置完二级缓存后,读取数据库数据,只要不保存就行
* @throws Exception
*/
@Test
public void testCache() throws Exception {
Session session = HibernateUtils.getSession();
Transaction tx = session.beginTransaction();
Login login = (Login) session.get(Login.class, 1);
tx.commit();
HibernateUtils.closeSession();
}
这里用的是Junit测试框架,需要导入相应的jar包
测试不报错,基本上都OK。
5、查询缓存
在Hibernate配置文件中配置
<!-- 查询缓存,有人也说三级缓存,看到不要奇怪 -->
<property name="hibernate.cache.use_query_cache">true</property>
/**
* 在程序中手动设置查询缓存
*/
query.setCacheable(true);