两个 Service A 的方法 A 没有加 @Transactional 和 Service B ;
Service A 的方法 A 没有加 @Transactional ;
Service B 的方法 B 添加 @Transactional ;
方法 A 调用方法 B ,方法 B 出错,抛出全局异常,
为什么会去回滚到 controller 里,再执行一次。
相当于 B 抛出全局异常后, 这个接口执行了两遍
1
Hurriance 201 天前
回滚到 controller ? debug 的过程是怎样的
|
2
kikione OP @Hurriance debug 就是 抛出异常后,又从 controller 执行一遍,我把 @Transactional 放在方法 A ,就不会重复执行了,直接返回异常
|
4
Hurriance 201 天前
可以的话,贴个代码吧
|
![]() |
5
thetbw 201 天前
应该是代码写的问题的,看看是不是接口哪里掉了两次,事务仅仅是数据库层面的回滚吧
|
![]() |
6
nonoyang 201 天前 via iPhone ![]() 刚下班,我他妈连第一句都看不懂……
|
7
ZeawinL 201 天前
没下班, 第一句我也看不懂......
|
![]() |
9
clf 201 天前
你怎么判断 Controller 接口执行了两次的?
另外建议贴代码。 |
10
siweipancc 201 天前 via iPhone
控制层打印一下当前线程 id
|
11
NutChocHoney 201 天前
断点放掉的一瞬间又有人走这个方法了吧
|
![]() |
12
yqsas 201 天前 via iPad
猜测 serviceA 那边开启了调用异常,自动重试功能
|
13
cp19890714 201 天前
你提出了两个问题。
1. 事务回滚到了 controller ,也就是说 A 中的数据也回滚了。 2. controller 执行了两次 回答: 1. 请说明你的证据 2. 最大可能就是异常触发重试 |
![]() |
14
LeeSeoung 201 天前
大概率是用的框架做了重试。。
|
15
leatomic 200 天前
只能说 talk is cheap 了
|
![]() |
16
tedzhou1221 199 天前
你可以 debug 一下,看看整个调用栈的过程
|
17
notwaste 191 天前
盲猜用了 spring retry
|