class MyService {

public void a() { synchronized(somekey) { b(); } }

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



我的目的是

 1-取得钥匙

 2-开始交易

 3-提交交易

 4-释放钥匙

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

有什么建议么 ?

谢谢。

最佳答案

除非您使用代码编织,否则这将无法工作。

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

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


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

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


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

10-07 15:37