1.打开二级缓存的配置——applicationContext.xml
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="hibernateProperties">
<props>
<!-- 设置方言 -->
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<!-- 格式化输出的sql语句(可选) -->
<prop key="hibernate.format_sql">
true
</prop>
<!-- 是否打印sql语句 -->
<prop key="hibernate.show_sql">
false
</prop>
<!-- 配置二级缓存 -->
<prop key="hibernate.cache.use_second_level_cache">
true
</prop>
<!-- 由于查询的缓存命中率很低,所以我们关掉查询时的二级缓存 -->
<prop key="hibernate.cache.use_query_cache">
false
</prop>
<!-- 配置二级缓存的相应的类 -->
<prop key=" hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>bean/Person.hbm.xml</value>
</list>
</property>
</bean>
注意我标注的红色部分,这块就是配置二级缓存,具体解释有注释,在最后一个配置项中配置了二级缓存的类,这个类为外部类,所以要加入ehcache的jar包。
2.设置Ehcache默认的配置文件——ehcache.xml(放在类路径下,src目录下)<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<diskStore path="D:/cache"/>
<defaultCache maxElementsInMemory="1000" eternal="false" overflowToDisk="true"
timeToIdleSeconds="120"
timeToLiveSeconds="180"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="60"/>
<cache name="bean.Person" maxElementsInMemory="100" eternal="false"
overflowToDisk="true" timeToIdleSeconds="300" timeToLiveSeconds="600" diskPersistent="false"/>
</ehcache>
<!--下面是解释 -->
<!-- path定义缓存的对象默认存放到哪里 -->
<!--defaultCache节点为缺省的缓存策略 -->
<!--maxElementsInMemory为内存中最大允许存在的对象数量 -->
<!--eternal设置缓存中的对象是否永远不过期-->
<!--overflowToDisk 把溢出的对象存放到硬盘上 -->
<!--timeToIdleSeconds 指定缓存对象空闲多长时间就过期,过期的对象会被清除掉 -->
<!--timeToLiveSeconds指定缓存对象总的存活时间 -->
<!--diskPersistent 当jvm结束是是否持久化对象 -->
<!--diskExpiryThreadIntervalSeconds 指定专门用于清除过期对象的监听线程的轮询时间 -->
<!--cache中是定义一些特别的缓存,如果不进行cache的定义,那么就会采用默认的缓存技术,上面我是为这个类定义缓存 -->
注意我上面的配置文件,蓝色部分如果没有必要就不用配置。如果不配置,那么就采用的是默认的缓存技术(defaultCache中的配置),如果配置了就采用他自己的配置。
3.为需要缓存的类添加缓存配置——xxx.hbm.xml
<hibernate-mapping>
<class name="bean.Person" table="employee" catalog="test">
<!-- usage中配置缓存策略,当两个并发的事务可以对他同时读,但是如果一个事务对他写的话,另外一个事务就不能读 -->
<!-- bean中定义实体类 -->
<cache usage="read-write" region="bean.Person"/>
<id name="empid" type="java.lang.Integer">
<column name="empid" />
<generator class="identity" />
</id>
注意我配置的红色部分,usage中配置的是缓存策略,read-write表示两个并发的事务可以同时对他读,但是如果一个事务对他写,另外一个事务就不能读。
4.学会了配置回来看看理论——什么是缓存
缓存是数据库数据临时容器,它包含了库表数据的临时拷贝,位于数据库与数据访问层之间。ORM进行数据读取时,会根据其缓存管理策略,首先在内存中查询,如果在内存中发现所需数据(缓存命中),则直接以此数据错位查询结果加以利用,从而避免了数据库调用的性能开销。
缓存的介质一般是内存,所以读写速度很快。但如果缓存中存放的数据量非常大时,也会用硬盘作为缓存介质。缓存的实现不仅仅要考虑存储的介质,还要考虑到管理缓存的并发访问和缓存数据的生命周期。
5.学会了配置回来看看理论——hibernate中的两个级别的缓存
Hibernate中提供了两级Cache,第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存。这一级别的缓存由hibernate管理的,一般情况下无需进行干预;第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存。这一级别的缓存可以进行配置和更改,并且可以动态加载和卸载。 Hibernate还为查询结果提供了一个查询缓存,它依赖于第二级缓存。
6.学会了配置回来看看理论——缓存策略详解
1)Read-only
只读。对于从来不会修改的数据,如参考数据,可以使用这种并发访问策略。
2)Nonstrict-read-write
非严格读写。如果程序对并发访问下的数据同步要求不是非常严格,且数据更新操作频 率较低(几个小时以上),可以采用这种并发访问策略,获得较好的性能。
3)Read-write
严格读写。提供了Read Committed事务隔离级别。仅仅在非集群的环境中适用。对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读这类的并发问题。
4) Transactional
事务。仅仅在托管环境中适用。它提供了Repeatable Read事务隔离级别。对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读和不可重复读这类的并发
分享到:
相关推荐
传播智客,为Spring集成的Hibernate配置二级缓存、cache.xml
为Spring集成的Hibernate配置二级缓存
此配置和包,是springMVC4.3.3 +spring4+hibernate5.1.3+二级缓存ehcache(不用可以关闭)+fastjson。 是正常运行的项目里拷出来的,方便大家使用。
Spring4+Hibernate4二级缓存实例源码.
基于springboot最新版本2.1.4.RELEASE,采用jpa为dao层框架,配置redis(redisson)为hibernate的二级缓存。
Spring 整合 Hibernate 时启用二级缓存实例详解 写在前面: 1. 本例使用 Hibernate3 + Spring3; 2. 本例的查询使用了 HibernateTemplate; 1. 导入 ehcache-x.x.x.jar 包; 2. 在 applicationContext.xml ...
spring2.5学习PPT 传智...为Spring集成的Hibernate配置二级缓存 30.Spring提供的CharacterEncoding和OpenSessionInView功能 31.使用Spring集成JPA 32.Struts+Spring+JPA集成 33.使用Spring集成Struts2 34.所有源码
NULL 博文链接:https://8366.iteye.com/blog/470815
Hibernate4二级缓存Ehcache案例,可参考博客:http://blog.csdn.net/coco2d_x2014/article/details/52927638
struts2+spring+hibernate集成例子,包含所有jar包,ehcache二级缓存,mysql数据,需要自己创建
本篇文章主要介绍了详解spring boot集成ehcache 2.x 用于hibernate二级缓存,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
struts1.x+spring+hibernate集成例子,包含所有jar包,ehcache二级缓存,数据库mysql,需要自己创建
其中包含apache的log4j记录日志信息,spring管理组件,springmvc分层,springaop配置数据库事务控制,hibernate二级缓存配置,实现了查询,用户登录注册,请求验证是否登录等基础功能Demo,基于后台测试,使用前台...
以上是Spring+Hibernate将文件二进制数据持久化到数据库的解决方案,而Struts通过将表单中file类型的组件映射为ActionForm中类型为org.apache.struts.upload. FormFile的属性来获取表单提交的文件数据。 工程...
2.初始不了SessionFactory 可能是二级缓存初始化问题,去掉二级缓存即可(在hibernate.配置文件中)(没多大用) 3. hibernate配置文件和applicationContent中也要修改数据库用户名和密码 因为这个是网站,所以源...
此项目整合了目前主流和最前源的web开发技术:采用ehcache实现二级缓存(包含查询缓存);用sf4j及logback(log4j的升级版)记录日志;proxool(据说是dbcp和c3p0三者中最优秀的)做连接池;使用jquery的ajax实现仿...
SSH三层架构MVC(struts1.3+spring2.x+hibernate3.2),Hibernate(ehcache)二级缓存技术,Spring 注解形式依赖注入,ehcache缓存 源代码,内有MySql anbyke.sql文件,方便创建数据库演示效果!
Spring3.2 Hibernate4.2 JPA2全注解实例.采用JTA事务管理,配置ehcache为二级缓存,在glassfish3.2.2和postgresql9测试通过。参考网上的资料整理。