新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
疑问,确实像往常一样在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; } }