Spring定义了7中事务的传播行为,在TransactionDefinition类中:
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;
}
是否支持事务 | 行为 | 是否抛出异常 | 是否默认 | |
---|---|---|---|---|
PROPAGATION_REQUIRED | 是 | 如果当前线程中存在事务,则使用当前事务,否则创建新事务。 | 否 | 是 |
PROPAGATION_SUPPORTS | 是 | 如果当前线程中存在事务,则使用当前事务,否则以非事务方式执行。 | 否 | 否 |
PROPAGATION_MANDATORY | 是 | 强制使用当前事务,如果当前线程中不存在事务,则抛出异常。 | 是 | 否 |
PROPAGATION_REQUIRES_NEW | 是 | 每次创建新事务,如果当前已经存在事务,则将当前事务挂起。 | 否 | 否 |
PROPAGATION_NOT_SUPPORTED | 否 | 不支持当前事务,始终以非事务方式执行。 | 否 | 否 |
PROPAGATION_NEVER | 否 | 不支持当前事务,如果当前存在事务,则抛出异常。 | 是 | 否 |
PROPAGATION_NESTED | 是 | 如果当前存在事务,则以嵌套事务的方式执行,否则行为与PROPAGATION_REQUIRED相同。 | 否 | 否 |