两个 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 是方法中间出错了自动回滚,你在另一个方法里调用的话,前一个方法里的事务都完成了,怎么回滚。
|