两个 api 返回的都是 自定义的 Result 类型。
Result 类型有一个 isSuccess()
数据库是 mysql,连接数据库的方式是 mybatis 和 mybatis plus
我对 Spring 回滚的方式不是很清楚,是直接调用 dao 的 insert 或者 update 方法出错是,在调用方法里加上@Transactional
会自动帮你回滚么?
但是现在 api 不会报错,我就想在第二个 api 判断 isSuccess 失败的时候手动调用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
不过运行的时候报错了
org.springframework.transaction.NoTransactionException: No transaction aspect-managed TransactionStatus in scope
同模块中也有@Transactional
的注解,应该不是配置出错了吧?
1 wc951 2019-06-18 12:36:25 +08:00 via Android 直接抛出一个 runtime 异常就会回滚 |
![]() | 2 reeco 2019-06-18 12:49:57 +08:00 via Android 这时候事务都已经结束了,你还 rollback 啥呀 |
![]() | 4 mmdsun 2019-06-18 15:54:01 +08:00 via Android 加入中间状态,事务补偿。 |
![]() | 5 dyc87112 2019-06-18 16:27:46 +08:00 |
![]() | 6 telami 2019-06-18 16:28:31 +08:00 两个 api,其实已经是两个子系统了吧,甚至是不同的据库了,没法回滚。 需要分布式事务了 |
![]() | 7 luckyrayyy 2019-06-18 16:29:59 +08:00 @Transactional 是方法中间出错了自动回滚,你在另一个方法里调用的话,前一个方法里的事务都完成了,怎么回滚。 |