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