完美解决Spring声明式事务不回滚的问题-创新互联

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

成都创新互联于2013年开始,是专业互联网技术服务公司,拥有项目网站设计制作、成都做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元临猗做网站,已为上家服务,为临猗各地企业和个人服务,联系电话:13518219792

下面总结一下经验教训:

Spring事务的管理操作方法

编程式的事务管理

实际应用中很少使用

通过使用TransactionTemplate 手动管理事务

声明式的事务管理

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

Spring的声明式事务是通过AOP实现的

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

spring事务不回滚的两个原因

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

1. Service类内部方法调用

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

@Service
public 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;
  }

}

网站栏目:完美解决Spring声明式事务不回滚的问题-创新互联
网站网址:http://ybzwz.com/article/cdeogi.html