【发布时间】:2011-03-03 11:52:18
【问题描述】:
我们有:
@Transactional(propagation = Propagation.REQUIRED)
public class MyClass implementes MyInterface { ...
MyInterface 有一个方法:go()。
当 go() 执行时,我们启动一个新事务,该事务在方法完成时提交/回滚 - 这很好。
现在让我们在 go() 中调用 MyClass 中的私有方法,该方法具有 @Transactional(propagation = Propagation.REQUIRES_NEW。似乎 Spring“忽略”了 REQUIRES_NEW 注释并且没有启动新事务。我相信这是因为 Spring AOP 在接口级别(MyInterface)上运行,不会拦截对 MyClass 方法的任何调用。这是正确的吗?
有没有办法在 go() 事务中启动一个新事务?是调用另一个将事务配置为 REQUIRES_NEW 的 Spring 托管 bean 的唯一方法吗?
更新:添加当客户端执行go() 时,它们是通过对接口的引用而不是类来执行的:
@Autowired
MyInterface impl;
impl.go();
【问题讨论】:
标签: java spring transactions