繁体   English   中英

Spring交易REQUIRES_NEW是否会传播到方法中的方法?

[英]Will Spring transaction REQUIRES_NEW be propagated to the methods within the method?

我的要求是从method2提交/回滚更改,而不依赖于外部事务。 因此,我使用REQUIRES_NEW提交了内部事务。 但是我需要澄清一下其他方法从该方法调用时将保持的传播类型。

@Transactional(propagation=Propagation.REQUIRES_NEW)
public String method1(long id) {
    ABC obj = method2(id);
    method3(obj);
    myDAO.saveOrUpdate(obj);
}

private ABC method2(long id) {
    ABC obj1 = myDAO.readData(id);
    ...
    ...
    return obj1;
}

private void method3(ABC obj) {
    ABC obj1 = (ABC)obj.clone();
    obj1.setId(123);
    obj1.setName("Name");
    myDAO.persist(obj1);
}

现在的问题是,即使将传播设置为REQUIRES_NEW ,数据也不会在method3method1提交。 还是只能在DAO层中进行这种传播?

正如我在您的代码中看到的那样,method2(..)属于调用method1(..)的同一对象,并且导致method2()使用由method1创建的相同新事务,此行为是由代理模式spring use i强制执行的引用:

在代理模式(默认设置)下,仅拦截通过代理传入的外部方法调用。 这意味着自调用实际上是目标对象中的一种方法,它调用目标对象的另一种方法,即使调用的方法标记有@Transactional,也不会在运行时导致实际事务。

要进行两次交易,必须在另一个对象中创建第二个方法,并用@Transactional(propagation=Propagation.REQUIRES_NEW)进行注释才能达到预期的效果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM