spring整合hibernate时启用二级缓存实例详解

bigben0123      2022-02-07     226

关键词:

 

写在前面:

  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会自动从一级缓存中取数据,可调用... 查看详情