当前位置: 首页 > 面试题库 >

休眠@Transactional和ehcache @Cacheable的组合总是创建数据库事务

钱锐
2023-03-14
问题内容

在我们的应用程序上进行负载测试时,我注意到,如果您使用@Transactional和@Cacheable注释,则hibernate将始终创建数据库事务。有防止这种情况的简便方法吗?在Spring中解决此问题的一种更巧妙的方法是拥有以下类/接口

  • 服务层接口
  • 可缓存的带注释的类,只是一个代理/转发给
  • 事务注释执行级别

发生了以下情况

通话1:

  1. 交易被创建
  2. 方法被调用
  3. 结果缓存并返回

通话2:

  1. 交易被创建
  2. 缓存的结果被返回

首选结果应为:

通话1:

  1. 交易被创建
  2. 类方法被调用
  3. 结果缓存并返回

通话2:

  1. 缓存的结果被返回

问题答案:

您需要更改@Transactional@Cacheable方面的相对顺序。

可以使用和的order属性进行配置。有关订单值的含义,请参见8.2.4.7建议订购。<tx:annotation-driven>``<cache:annotation- driven>



 类似资料:
  • 问题内容: 目前,我正在使用带有@Transactional批注的DriverManagerDataSource来管理事务。但是所有事务都非常非常慢,这可能是因为数据源每次都打开和关闭与db的连接。 我应该使用什么数据源来加快交易速度? 问题答案: 实际上不是连接池,只能用于测试。您应该尝试使用Apache Commons DBCP 。就像是:

  • 问题内容: 在我的应用程序中,我使用了hibernate-core-4.1.8 jar,并希望将ehCache用作第二级缓存。我当前使用的jar是ehcache- core-2.5.0。我将其放置在WebContetn / WEB-INF / lib文件夹中,并将其放置在类路径中。 我的hibernate.cfg.xml看起来像这样: 放置在JavaResources / src文件夹中的ehca

  • 问题内容: 我正在使用hibernate处理spring项目,并希望使用ehcache实现二级缓存。我看到了许多解决方法: 引入注释 一个旨在成为继任者的工具集。 可以很好地集成到休眠本身中,以使用例如注释进行缓存。 使用代理。基于注释的配置迅速变得有限或复杂(例如,注释嵌套的多个级别) 就我个人而言,我认为还不够彻底,因此我可能更愿意考虑发展得更为积极。尽管这似乎是最完整的实现(例如,读取和写入

  • 问题内容: 我正在使用Java 2 ee开发Web应用程序。我也使用hibernate和MySQL。为了还原备份文件,在我的应用程序中的某个点上,我需要删除当前数据库并重新创建它,我按如下操作: 删除并重新创建后,我需要使用默认用户(Spring Security用户)初始化数据库 但在最后一行应用程序抛出此异常 我知道hibernate在启动时会创建表,但是在这种情况下,它在drop / rec

  • 我在ID号中包含姓名数据以及许多关联值。它看起来像这样: 我想创建名称的所有组合,不管有多少个,并将它们粘贴在一起,用逗号分隔,并在每个id中求其编号和值的总和。上述示例的预期输出为: 谢谢大家!

  • 问题内容: 是否可以仅对hibernate-search的注释(bean => document / document => bean mapping)使用hibernate-search,而不使用数据库?如果是这样,是否有任何在线样本基本上显示了如何进行设置? 我发现了以下内容:http : //mojodna.net/2006/10/02/searchable-annotation-drive