Spring Boot的事务@Transactional默认的回滚行为

在 Spring 中,@Transactional 默认只对 RuntimeException(运行时异常)和 Error(非常规错误,如OutOfMemoryError、StackOverflowError) 进行回滚,对 IOException, SQLException这类检查异常,则不会回滚。

 

Throwable
├── Error ← 非常规错误(如 OutOfMemoryError)
└── Exception
├── RuntimeException ← 未检查异常(如 IllegalArgumentException)
└── 其他 Exception ← 检查异常(如 IOException、SQLException)

 

在大多数业务场景下,建议显式设置 rollbackFor = Exception.class(但是这样,默认的Error就被排除了,O(∩_∩)O)


@Transactional(rollbackFor = Exception.class) // Exception下所有异常回滚(不含Error)
public void businessMethod() throws Exception {
    // 你的业务逻辑
}

 

在自己的理解和项目实战中,用默认的@Transactional就行,无需显示设置。

如果项目中如果需要手动抛出异常做回滚,自己封装一个继承于RuntimeException的异常进行抛出就行,从而触发事务。

点击数:29
创建时间:2026-01-17 17:18:15
更新时间:2026-01-31 17:05:22