【发布时间】:2014-09-23 04:17:16
【问题描述】:
我不明白 Spring 的事务注释是如何工作的。所以我在没有实际意义的情况下进行了下一个测试,但它显示了我的问题:
public class TransactionalTest {
public void noTransaction(){
required();
}
@Transactional(propagation = Propagation.SUPPORTS)
public void supports(){
required();
}
@Transactional(propagation = Propagation.REQUIRED)
public void transaction(){
required();
}
@Transactional(propagation = Propagation.REQUIRED)
public void required(){
mandatory();
}
@Transactional(isolation = Isolation.READ_UNCOMMITTED, propagation = Propagation.MANDATORY)
public void mandatory(){
doSomething();
}
private void doSomething(){
//I don't feel like to do something.
}
}
方法 noTransaction、supports 和 transaction 调用相同的方法:required 但只有最后一个 (transaction) 可以正常工作。另外两个给我返回消息No existing transaction found for transaction 标记为传播“强制”。
在实际情况下,我有一些非事务性方法调用带有REQUIRED 注释的事务性方法(它工作正常)。但是,如果一个非事务方法调用一个事务方法(用REQUIRED 注释),它又调用另一个用MANDATORY 注释的事务方法,它就会失败。
为什么会出现这种行为以及如何避免这种行为?我注释了所有调用transaccional方法的方法以防万一?
【问题讨论】:
标签: java spring transactions annotations spring-aop