在Spring中,@Transactional注解用于实现事务管理。当在@Transactional注解标记的方法内部调用另一个方法时,事务可能不会起作用的原因是因为Spring的事务机制是基于代理模式实现的。
解决这个问题的方法有两种:
@Transactional
public class MyClass {
public void method1() {
// ...
method2();
// ...
}
public void method2() {
// ...
}
}
@Service
public class MyService {
@Autowired
private MyDao myDao;
@Transactional
public void method1() {
// ...
MyService target = AopProxyUtils.ultimateTargetClass(this);
target.method2();
// ...
}
public void method2() {
// ...
}
}
这样做可以绕过代理对象,直接调用目标类的方法,确保事务起作用。
以上是解决在Spring @Transactional内部调用方法时事务不起作用的两种方法。希望对你有帮助!
领取专属 10元无门槛券
手把手带您无忧上云