什么是 rollbackFor?
在 Spring 框架中,@Transactional 注解用于声明式事务管理。
默认情况下,Spring 仅在遇到 RuntimeException 或 Error 时才会触发事务回滚。
若希望在捕获到检查型异常(Checked Exception)时也回滚事务,就需要使用 rollbackFor 属性。
基本用法示例
@Transactional(rollbackFor = Exception.class)
public void transferMoney(Account from, Account to, BigDecimal amount) throws IOException {
// 业务逻辑
if (someCondition) {
throw new IOException("文件读取失败");
}
}
上述代码中,即使抛出的是 IOException(属于检查型异常),
由于指定了 rollbackFor = Exception.class,事务仍会回滚。
常见配置方式
rollbackFor = Exception.class:对所有异常回滚rollbackFor = {SQLException.class, IOException.class}:指定多个异常类型- 不设置:仅对未检查异常(
RuntimeException及其子类)回滚
注意事项
- rollbackFor 仅在方法被 Spring 代理调用时生效(如通过 Service 层调用)
- 自调用(同一类内方法调用)不会触发事务行为
- 建议结合日志记录异常信息,便于排查问题