关键词:
写在前面:
1. 本例使用 Hibernate3 + Spring3;
2. 本例的查询使用了 HibernateTemplate;
1. 导入 ehcache-x.x.x.jar 包;
2. 在 applicationContext.xml 文件中找到 sessionFactory 相应的配置信息并在设置 hibernateProperties 中添加如下代码:
1
2
3
4
5
6
|
< prop key = "hibernate.cache.use_query_cache" >true</ prop >
< prop key = "hibernate.cache.use_second_level_cache" >true</ prop >
< prop key = "hibernate.cache.provider_class" >org.hibernate.cache.EhCacheProvider</ prop >
|
3. 由于查询使用了 hibernateTemplate,所以还要在 hibernateTemplate 中做相应配置,找到 hibernateTemplate 的配置项,添加如下代码:
1
2
3
4
|
< property name = "cacheQueries" >
< value >true</ value >
</ property >
|
4. 在要缓存的实体类中加入如下注解:
1
|
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
注:
usage 可以有以下几个取值:
- CacheConcurrencyStrategy.NONE:不使用缓存,默认;
- CacheConcurrencyStrategy.READ_ONLY:只读模式,若对缓存的数据进行修改操作会抛出异常;
- CacheConcurrencyStrategy.NONSTRICT_READ_WRITE:不严格的读写模式,不会对缓存的数据加锁;
- CacheConcurrencyStrategy.READ_WRITE:读写模式,在更新缓存的时候会把缓存里面的数据换成一个锁,其它事务如果去取相应的缓存数据,发现被锁了,直接就去数据库查询;
- CacheConcurrencyStrategy.TRANSACTIONAL:事务模式,支持事务,当事务发生回滚时,缓存中的数据也回滚,只支持 JPA 。
5. 配置 ehcache.xml 文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<ehcache>
<!-- 指定一个文件目录,当EHCache把数据写到硬盘上时,将把数据写到这个目录下 -->
<diskStore path= "java.io.tmpdir" />
<!--
name 设置缓存的名字,他的取值为类的完整名字或者类的集合的名字;
maxElementsInMemory 设置基于内存的缓存可存放的对象的最大数目
eternal 如果为 true ,表示对象永远不会过期,此时会忽略timeToIdleSeconds和timeToLiveSeconds,默认为 false ;
timeToIdleSeconds 设定允许对象处于空闲状态的最长时间,以秒为单位;
timeToLiveSeconds 设定对象允许存在于缓存中的最长时间,以秒为单位;
overflowToDisk 如果为 true ,表示当基于内存的缓存中的对象数目达到maxElementsInMemory界限,会把溢出的对象写到基于硬盘的缓存中;
-->
<!-- 设置缓存的默认数据过期策略 -->
<defaultCache
maxElementsInMemory= "1000"
eternal= "false"
timeToIdleSeconds= "1200"
timeToLiveSeconds= "1200"
overflowToDisk= "false"
/>
<!-- 设定具体的第二级缓存的数据过期策略 -->
<cache name= "com.shawearn.model.User"
maxElementsInMemory= "1000"
eternal= "false"
timeToIdleSeconds= "3000"
timeToLiveSeconds= "3000"
overflowToDisk= "false" />
</ehcache>
|
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
hibernate二级缓存整合
<?xmlversion="1.0"encoding="UTF-8"?><ehcachexmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"><!--磁盘缓存位置--><diskS 查看详情
休眠:无法启用二级缓存
】休眠:无法启用二级缓存【英文标题】:Hibernate:Troubleenablingsecondlevelcache【发布时间】:2011-06-2814:08:15【问题描述】:我使用的是Hibernate3.3.4.GA。在我们的hibernate.cfg.xml文件中,我们指定……<propertyname="hibernate.cache.provider_class... 查看详情
grails3(spring-boot)-如何配置hibernate二级缓存
...ernate.cache.region.factory_class我试着在application.yml中配置它:spring:jpa:properties:hibernat 查看详情
Hibernate 二级缓存在运行几个弹簧测试时关闭
...【英文标题】:Hibernatesecondlevelcacheisclosedwhilerunningacoupleofspringtests【发布时间】:2019-10-2522:21:32【问题描述】:我正在尝试为基于Hibernate5.3和SpringBoot2.1.3并使用Hibernate二级缓存的应用程序编写测试。当我正在执行一批设置spring上... 查看详情
hibernate二级缓存和事务级别详讲
...了,下一系列会讲解Struts2的东西,然后说完Struts2,在到Spring,然后在写一个SSH如何整合的案例。之后就会在去讲SSM,在之后我自己的个人博客应该也差不多可以做出来了。基本上先这样定下来,开始完成hibernate的东西把。这章... 查看详情
hibernate学习————二级缓存和事务级别详讲
...了,下一系列会讲解Struts2的东西,然后说完Struts2,在到Spring,然后在写一个SSH如何整合的案例。之后就会在去讲SSM,在之后我自己的个人博客应该也差不多可以做出来了。基本上先这样定下来,开始完成hibernate的东西把。这章... 查看详情
hibernate二级缓存很慢
...乎其他人也有同样的问题,但没有得到答案:http://forum.spring.io/forum/s 查看详情
hibernate一级缓存,二级缓存,查询缓存
1、一级缓存是session级的缓存,session结束即事务提交,session关闭,缓存清除。效果不大 get方式:一个session内,第二次查询不连数据库。适用于一级缓存 load方式:懒加载查询(查询时不执行sql,使用结果时才会... 查看详情
ehcache整合spring使用页面对象缓存
...、数据进行缓存,同时支持集群/分布式缓存。如果整合Spring、Hibernate也非常的简单,Spring对Ehcache的支持也非常好。EHCache支持内存和磁盘的缓存,支持LRU、LFU和FIFO多种淘汰算法,支持分布式的Cache,可以作为Hibernate的缓存插件。... 查看详情
Hibernate 2 级数据缓存和集成/验收测试
...于性能原因,我有一个启用了二级数据缓存的JPA/Hibernate/Spring/TomcatWeb应用程序。而且缓存做得很好!我还有一个Cucumber测试套件,它将一些测试数据直接添加到应用程 查看详情
hibernate的一级缓存和二级缓存分别是啥?
参考技术A1.Hibernate的缓存包括Session的缓存和SessionFactory的缓存,其中SessionFactory的缓存又可以分为两类:内置缓存和外置缓存。Session的缓存是内置的,不能被卸载,也被称为Hibernate的第一级缓存。2.SessionFactory的内置缓存和Session... 查看详情
hibernate学习11——配置hibernate二级缓存
... 以空间换时间; 二、Hibernate缓存的分类: 前面我们讲的缓存都是session缓存;也叫一级缓存;get,load... 查看详情
java示例代码_当我的Hibernate事务由Spring管理时,启用Hibernate拦截器
java示例代码_当我的Hibernate事务由Spring管理时,启用Hibernate拦截器 查看详情
如何使用 Spring 清除所有 Hibernate 缓存(ehcache)?
】如何使用Spring清除所有Hibernate缓存(ehcache)?【英文标题】:HowtoclearallHibernatecache(ehcache)usingSpring?【发布时间】:2010-03-1709:31:12【问题描述】:我正在使用二级缓存和查询缓存。我可以知道如何以编程方式清除所有缓存吗?... 查看详情
hibernate缓存何时使用和如何使用
参考技术A 关于hibernate缓存的问题 基本的缓存原理 Hibernate缓存分为二级 第一级存放于session中称为一级缓存默认带有且不能卸载 第二级是由sessionFactory控制的进程级缓存是全局共享的缓存凡是会调用... 查看详情
[转]hibernate一级缓存二级缓存
缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事... 查看详情
hibernate学习笔记—hibernate的二级缓存(代码片段)
我们知道hibernate的一级缓存是将数据缓存到了session中从而减少与数据库的交互。那么二级缓存呢?一、应用场合比如,在12306购票时,需要选择出发地与目的地,如果每点一次都与数据库交互一次,这就很不... 查看详情
hibernate一级缓存和二级缓存
hibernate一级缓存:session缓存即事务级缓存,session关闭,缓存自动销毁,开发人员不用管理,由hibernate管理,save、update、saveoOrUpdate、lock、load、list会自动向一级缓存中存放数据,get,load,list会自动从一级缓存中取数据,可调用... 查看详情