Transactional 事务传播设置
时间: 2024-06-26 10:01:12 浏览: 178
@Transactional 是 Spring 框架中的一个注解,用于配置事务管理。事务传播(Transaction Propagation)定义了当一个方法被包含在一个事务中时,如果当前存在事务,应该采取何种策略。Spring 提供了多种事务传播行为:
1. `PROPAGATION_REQUIRED` (默认值): 如果当前没有事务,Spring 将开始一个新的事务;如果有事务,则加入到现有的事务中。这是最常见的行为,表示方法必须在事务上下文中执行。
2. `PROPAGATION_SUPPORTS`: 如果当前存在事务,方法将在该事务中执行;如果没有事务,方法将像 `REQUIRED` 一样开始新的事务。这适用于那些不需要强制在事务中的方法。
3. `PROPAGATION_MANDATORY`: 必须在事务中执行,如果没有事务,会抛出异常。这对于数据库操作中的强制原子性很有用。
4. `PROPAGATION_REQUIRES_NEW`: 在新的事务中执行,无论当前是否存在事务。这适用于希望独立于现有事务运行的方法。
5. `PROPAGATION_NESTED`: 创建嵌套事务,如果当前存在事务,则开始新事务;否则就像 `REQUIRED`。通常用于读写操作的隔离级别控制。
6. `PROPAGATION_NOT_SUPPORTED`: 方法不会在事务上下文中执行,即使当前存在事务。
7. `PROPAGATION_NEVER`: 禁止事务传播,无论当前是否有事务,都会作为非事务方法执行。
相关问题:
1. 何时会选择使用 `PROPAGATION_REQUIRED` 或 `PROPAGATION_REQUIRES_NEW`?
2. 如何通过代码设置事务传播行为?
3. `PROPAGATION_NESTED` 和其他传播行为的主要区别是什么?
阅读全文