首页 > 代码库 > 配置Hibernate的二级缓存
配置Hibernate的二级缓存
1.在applicationContex.xml文件里面添加二级缓存配置:
<!-- 配置hibernate的sessionFactory --><bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"><ref bean="dataSource" /></property> <property name="mappingResources"> <list> <value>com/persia/model/Person.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <value> hibernate.dialect=org.hibernate.dialect.MySQL5Dialect hibernate.hbm2ddl.auto=update hibernate.show_sql=false hibernate.format_sql=false hibernate.cache.use_second_level_cache=true //使用二级缓存 hibernate.cache.use_query_cache=false //不使用查询缓存,因为命中率不高 hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider //使用Ehcache </value> </property></bean>
2.添加ehcache.xml的缓存配置文件:
<?xml version="1.0" encoding="UTF-8"?><!-- defaultCache节点为缺省的缓存策略 maxElementsInMemory 内存中最大允许存在的对象数量 eternal 设置缓存中的对象是否永远不过期 overflowToDisk 把溢出的对象存放到硬盘上 timeToIdleSeconds 指定缓存对象空闲多长时间就过期,过期的对象会被清除掉 timeToLiveSeconds 指定缓存对象总的存活时间 diskPersistent 当jvm结束是是否持久化对象 diskExpiryThreadIntervalSeconds 指定专门用于清除过期对象的监听线程的轮询时间 --><ehcache> <diskStore path="D:\cache"/> <defaultCache maxElementsInMemory="1000" eternal="false" overflowToDisk="true" timeToIdleSeconds="120" timeToLiveSeconds="180" diskPersistent="false" diskExpiryThreadIntervalSeconds="60"/><cache name="com.persia.model.Person" maxElementsInMemory="100" eternal="false" overflowToDisk="true" timeToIdleSeconds="300" timeToLiveSeconds="600" diskPersistent="false"/></ehcache>
3.在实体bean的映射文件添加缓存设置:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.persia.model"> <class name="Person" table="person"> <cache usage="read-write" region="com.persia.model.Person"/> <id name="id"> <generator class="native"/> </id> <property name="name" length="30" not-null="true"/> </class></hibernate-mapping>
4.测试是否使用缓存
第一次获取从数据库获取,然后缓存,关闭数据库,进行第二次获取,看是否能获取得到。
@Test public void testGetPerson() { System.out.println(ps.getPerson(7).getName()); try { System.out.println("请在15秒之内关闭数据库"); Thread.sleep(15*1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("从缓存获取:"+ps.getPerson(7).getName()); }
结果:
传智播客4
请在15秒之内关闭数据库
从缓存获取:传智播客4
查看磁盘的缓存文件:
分类: Spring
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。