当前位置: 首页 > 知识库问答 >
问题:

当Spring事务管理器回滚SQL事务时,如何通知应用程序?

夏谦
2023-03-14

在基于Spring的应用程序中,事务管理器负责提交或回滚SQL事务。我的应用程序对持久性数据的某些部分使用自定义缓存。这个缓存不是由Spring或Hibernate管理的。

如果SQL事务遇到错误并且必须回滚,那么缓存修改也应该回滚。

我的问题是,当Spring Transaction Manager回滚事务时,如何注册一个将调用我的cache.evict()方法的事件侦听器或回调?

共有1个答案

江英卓
2023-03-14

您可以为此使用TransactionSynchronizationAdapter。为了参考,您可以查看以下内容:Spring-Commit JMS事务之后的JPA事务

在链接中给出的答案中,同步是为aftercommit注册的。在您的情况下,它将是aftercompletity。在该实现中,您将需要检查事务是否处于回滚状态,并执行缓存驱逐。

 类似资料:
  • 我面临一个挑战,需要从SQL Server数据库中读取“未处理”的数据,处理数据,然后有选择地更新DB2数据库中的两到六个表,然后将该数据标记为在SQL Server上的原始数据库中已处理。在任何时候,如果出现任何故障,我希望所有更新都回滚。如果我有10个未处理的项目,9个良好,但有一个失败,我仍然希望9个良好的项目完成,第10个恢复到原始状态,直到我们可以研究问题并进行更正。 总体架构是,一个输

  • 你能告诉我如何只对某些代码块运行事务吗?我有@Transactional的服务函数,并从它们调用存储库函数,在那里执行查询。但当查询失败时,由于事务必须结束,服务功能也随之失效。那么,当存储库函数失败时,如何返回null值呢?我需要在失败时捕获空值,并继续一些逻辑。我的代码: 我尝试了@davidxxx的答案,得到了这个错误:

  • 我在使用@Transactional注释进行事务回滚时遇到了一个问题。 我在backingbean、service和dao类中有以下方法:

  • -ZJ 以下是我在Application.Properties中的数据源设置:

  • 我在一家spring boot hibernate JPA个人项目书店工作。我面临一个问题,即使用@Transactional注释注释的方法即使在运行时异常的情况下也无法回滚事务。我使用的是spring boot版本1.5.1、hibernate版本5、java版本11 下面是bean配置文件代码: 下面是BooK模型文件代码 下面是商店型号代码 下面是BookDaoImpl代码 下面是Store

  • 我使用的是Spring Boot 1.4.2中的spring-boot-starter-data-jpa。 一切都很好(@Entity classes discovery、datasource自动配置、transaction自动配置、EntityManager自动配置)。