返回顶部
首页 > 资讯 > 精选 >完美解决Spring声明式事务不回滚的问题
  • 174
分享到

完美解决Spring声明式事务不回滚的问题

spring声明式事务不回滚 2023-05-31 12:05:07 174人浏览 泡泡鱼
摘要

疑问,确实像往常一样在service上添加了注解 @Transactional,为什么查询数据库时还是发现有数据不一致的情况,想想肯定是事务没起作用,出现异常的时候数据没有回滚。于是就对相关代码进行了一番测试,结果发现一下踩进了两个坑,确实

疑问,确实像往常一样在service上添加了注解 @Transactional,为什么查询数据库时还是发现有数据不一致的情况,想想肯定是事务没起作用,出现异常的时候数据没有回滚。于是就对相关代码进行了一番测试,结果发现一下踩进了两个坑,确实是事务未回滚导致的数据不一致。

下面总结一下经验教训:

Spring事务的管理操作方法

编程式的事务管理

实际应用中很少使用

通过使用TransactionTemplate 手动管理事务

声明式的事务管理

开发中推荐使用(代码侵入最少)

spring的声明式事务是通过aop实现的

主要掌握声明式的事务管理。

spring事务不回滚的两个原因

总结一下导致事务不回滚的两个原因,一是Service类内部方法调用,二是try...catch异常。

1. Service类内部方法调用

大概就是 Service 中有一个方法 A,会内部调用方法 B, 方法 A 没有事务管理,方法 B 采用了声明式事务,通过在方法上声明 Transactional 的注解来做事务管理。示例代码如下:

@Servicepublic class RabbitServiceImpl implements RabbitService {  @Autowired  private RabbitDao rabbitDao;  @Autowired  private TortoiseDao tortoiseDao;  @Override  public Rabbit methodA(String name){    return methodB(name);  }  @Transactional(propagation = Propagation.REQUIRED)  public boolean methodB(String name){    rabbitDao.insertRabbit(name);    tortoiseDao.insertTortoise(name);    return true;  }}

--结束END--

本文标题: 完美解决Spring声明式事务不回滚的问题

本文链接: https://lsjlt.com/news/225862.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作