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()
获取代理对象。