事务的传播特性与理解

事务的传播特性与理解

原文地址

事务的传播在Spring注解中使用@Transactional(propagation=Propagation.REQUIRED)来配置。

事务的传播类型

1. REQUIRED 默认值

如果已经存在事务,则加入此事务中执行;如果不存在事务,则新建事务执行。
一般使用此模式就能满足绝大多数业务逻辑。

2. SUPPORTS

如果当前存在事务,则加入此事务中执行;如果当前不存在事务,则以非事务方式执行。

3. NOT_SUPPORTED

始终以非事务方式执行;如果当前存在事务,则挂起事务。

4. REQUIRES_NEW

始终在新事务中执行;如果当前存在事务,则新建事务执行。

5. NEVER

以非事务方式执行;如果当前存在事务,则抛出异常。

6. MANDATORY

始终以事务方式执行;如果当前不存在事务,则抛出异常。

事务传播特性示例中理解

1. 使用NOT_SUPPORTED

如果我们在一个事务方法中需要记录操作日志,这个时候我们就可以把日志记录方法设置为NOT_SUPPORTED

@Transactional(propagation=Propagation.NOT_SUPPORTED)
public void saveLog() {
    // ...
}

@Transactional(propagation=Propagation.REQUIRED)
public void dealTransactional() {
    saveLog();
    // xxx
}
2. 使用REQUIRES_NEW

如果我们在一个事务方法中需要执行另一个事务方法,并且不想另一个事务方法导致的回滚影响本事务方法,这个时候就适合使用REQUIRES_NEW

@Transactional(propagation=Propagation.REQUIRES_NEW)
public void otherTransactional() {
    // ...
}

@Transactional(propagation=Propagation.REQUIRED)
public void dealTransactional() {
    // xxx
    otherTransactional();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章