疑问,确实像往常一样在service上添加了注解 @Transactional,为什么查询数据库时还是发现有数据不一致的情况,想想肯定是事务没起作用,出现异常的时候数据没有回滚。于是就对相关代码进行了一番测试,结果发现一下踩进了两个坑,确实
疑问,确实像往常一样在service上添加了注解 @Transactional,为什么查询数据库时还是发现有数据不一致的情况,想想肯定是事务没起作用,出现异常的时候数据没有回滚。于是就对相关代码进行了一番测试,结果发现一下踩进了两个坑,确实是事务未回滚导致的数据不一致。
下面总结一下经验教训:
Spring事务的管理操作方法
编程式的事务管理
实际应用中很少使用
通过使用TransactionTemplate 手动管理事务
声明式的事务管理
开发中推荐使用(代码侵入最少)
主要掌握声明式的事务管理。
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
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0