事务传播行为是为了解决业务层方法之间互相调用的事务问题。
当事务方法被另外一个事务方法调用时,必须制定事务应该如何传播。例如:方法可能继续在现有事务中运行,也可能开启一个新事物,并在自己的事务中运行。
举个例子!
我们在A类的方法中调用了B类的方法。这个时候就涉及到业务层方法之间互相调用的事务问题。如果我们的如果发生异常需要回滚,如何配置事务传播行为才能让也跟着回滚呢?这个时候就需要事务传播行为的知识了。
Class A {
@Transactional(propagation=propagation.xxx)
public void aMethod {
//do something
B b = new B();
b.bMethod();
}
}
Class B {
@Transactional(propagation=propagation.xxx)
public void bMethod {
//do something
}
}
在定义中包括了如下几个表示传播行为的常量:
public interface TransactionDefinition {
int PROPAGATION_REQUIRED = 0;
int PROPAGATION_SUPPORTS = 1;
int PROPAGATION_MANDATORY = 2;
int PROPAGATION_REQUIRES_NEW = 3;
int PROPAGATION_NOT_SUPPORTED = 4;
int PROPAGATION_NEVER = 5;
int PROPAGATION_NESTED = 6;
......
}