Spring 整合 Hibernate 时启用二级缓存实例详解

发布时间 - 2026-01-10 23:04:33    点击率:

Spring 整合 Hibernate 时启用二级缓存实例详解

写在前面:

  1. 本例使用 Hibernate3 + Spring3;
  2. 本例的查询使用了 HibernateTemplate;

1. 导入 ehcache-x.x.x.jar 包;

2. 在 applicationContext.xml 文件中找到 sessionFactory 相应的配置信息并在设置 hibernateProperties 中添加如下代码:

<!-- 配置使用查询缓存 --> 
<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 的配置项,添加如下代码:

<!-- 使用查询缓存 --> 
<property name="cacheQueries"> 
  <value>true</value> 
</property> 


4. 在要缓存的实体类中加入如*解:

@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 

注:

  usage 可以有以下几个取值:

  • CacheConcurrencyStrategy.NONE:不使用缓存,默认;
  • CacheConcurrencyStrategy.READ_ONLY:只读模式,若对缓存的数据进行修改操作会抛出异常;
  • CacheConcurrencyStrategy.NONSTRICT_READ_WRITE:不严格的读写模式,不会对缓存的数据加锁;
  • CacheConcurrencyStrategy.READ_WRITE:读写模式,在更新缓存的时候会把缓存里面的数据换成一个锁,其它事务如果去取相应的缓存数据,发现被锁了,直接就去数据库查询;
  • CacheConcurrencyStrategy.TRANSACTIONAL:事务模式,支持事务,当事务发生回滚时,缓存中的数据也回滚,只支持 JPA 。

5. 配置 ehcache.xml 文件:

<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> 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Spring  # 整合  # Hibernate  # 时启用二级缓存实例详解  # 启用二级缓存  # SSH整合中 hibernate托管给Spring得到SessionFactory  # 详解JAVAEE——SSH三大框架整合(spring+struts2+hibernate)  # SSH框架网上商城项目第1战之整合Struts2、Hibernate4.3和Spring4.2  # Spring4整合Hibernate5详细步骤  # spring+hibernate 两种整合方式配置文件的方法  # Java框架篇:Spring+SpringMVC+hibernate整合开发  # Spring+Hibernate+Struts(SSH)框架整合实战  # Spring与Hibernate整合事务管理的理解  # Spring MVC+FastJson+hibernate-validator整合的完整实例教程  # struts+spring+hibernate三个框架的整合  # Spring和Hibernate的整合操作示例  # 写到  # 会把  # 本例  # 几个  # 使用了  # 并在  # 要在  # 希望能  # 会对  # 就去  # 谢谢大家  # 永远不会  # 抛出  # 上时  # 值为  # 将把  # 加锁  # 中做  # 类中  # 默认为 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: WEB开发之注册页面验证码倒计时代码的实现  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  如何用PHP工具快速搭建高效网站?  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  Laravel怎么实现验证码(Captcha)功能  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  node.js报错:Cannot find module &#39;ejs&#39;的解决办法  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  Laravel怎么实现模型属性的自动加密  高端建站如何打造兼具美学与转化的品牌官网?  JS弹性运动实现方法分析  Laravel如何实现用户注册和登录?(Auth脚手架指南)  javascript中的try catch异常捕获机制用法分析  新三国志曹操传主线渭水交兵攻略  Laravel如何使用Collections进行数据处理?(实用方法示例)  如何彻底卸载建站之星软件?  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  深圳网站制作平台,深圳市做网站好的公司有哪些?  如何在阿里云服务器自主搭建网站?  如何在IIS7上新建站点并设置安全权限?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  电商网站制作价格怎么算,网上拍卖流程以及规则?  HTML 中动态设置元素 name 属性的正确语法详解  长沙做网站要多少钱,长沙国安网络怎么样?  *服务器网站为何频现安全漏洞?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  如何在云主机快速搭建网站站点?  七夕网站制作视频,七夕大促活动怎么报名?  ,怎么在广州志愿者网站注册?  C#如何调用原生C++ COM对象详解  Laravel如何使用Gate和Policy进行授权?(权限控制)  如何在宝塔面板创建新站点?  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程  jQuery validate插件功能与用法详解  EditPlus中的正则表达式 实战(2)  如何用花生壳三步快速搭建专属网站?  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  JS中对数组元素进行增删改移的方法总结  微信小程序 canvas开发实例及注意事项  如何挑选最适合建站的高性能VPS主机?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  黑客入侵网站服务器的常见手法有哪些?  网站建设要注意的标准 促进网站用户好感度!  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  javascript中对象的定义、使用以及对象和原型链操作小结  javascript如何操作浏览器历史记录_怎样实现无刷新导航  浅谈Javascript中的Label语句