gpt4 book ai didi

java - Spring @Transactional 并发

转载 作者:行者123 更新时间:2023-11-30 06:37:15 25 4
gpt4 key购买 nike


class MyService {<p></p>

<p>public void a() {
synchronized(somekey) {
b();
}
}</p>

<p>@Transactional(propagation = Propagation.REQUIRES_NEW)
public void b() {
...do DB works...
}
}
</p>

我的目标是

    1 - 获取 key
    2 - 开始事务
    3 - 提交事务
    4 - 松开按键

当我从外部调用 a() 方法时,事务不起作用。

有什么建议吗?

谢谢。

最佳答案

除非您使用代码编织,否则这是行不通的。

Spring处理事务的默认方式是通过AOP proxies 。对事务方法的调用如下所示:

 caller --> ProxyClass.a() --> YourClass.a()

如果您对同一对象调用另一个方法,则不会通过代理,因此不存在事务行为。

 caller --> ProxyClass.a() --> YourClass.a() --> YourClass.b()

如果你不想使用AspectJ,可以使用 AopContext.currentProxy() 获取代理对象.

关于java - Spring @Transactional 并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3708449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com