前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring事务回滚机制_事务回滚失败

spring事务回滚机制_事务回滚失败

作者头像
全栈程序员站长
发布2022-11-01 10:59:02
2.1K0
发布2022-11-01 10:59:02
举报
文章被收录于专栏:全栈程序员必看

Spring事务回滚

使用 @Transaction 来配置自动回滚,可以配置在类上,也可以配置在方法上(作用域不同),但对final或private修饰的方法无效,且该类必须是受spring所管控的。

代码语言:javascript
复制
@Service
@Transactional
public class UserServiceImpl implements UserService { 
     
    @Override
    public void save(User user) { 
     
        //some code
        //db operation
    }
}

Jetbrains全家桶1年46,售后保障稳定

若被配置的方法或类抛出了异常,则事务会被自动回滚,除非你在该方法中手动捕获了异常。可以使用 @Transactional(rollbackFor = Exception.class) 来设定针对特定的异常进行事务回滚,如果不设置则默认会回滚 RuntimeException and Error (参考自源码内文档)。

代码语言:javascript
复制
@Service
@Transactional(rollbackFor = Exception.class)
public class UserServiceImpl implements UserService { 
     
    @Resource
	private UserMapper userMapper;
    
    @Override
    public void save(User user) { 
     
        userMapper.insert(user);
        throw new RuntimeException(); // 抛出异常,事务回滚,上面的insert插入失败。
    }
}

通过注入 DataSourceTransactionManager 来手动开启事务,手动回滚事务,用于抛出异常被catch后,进行手动回滚。

代码语言:javascript
复制
@Service
public class UserServiceImpl implements UserService { 

@Autowired
private DataSourceTransactionManager transactionManager;
@Override
@Transactional
public void save(User user) { 

DefaultTransactionDefinition def = new DefaultTransactionDefinition();
// explicitly setting the transaction name is something that can only be done programmatically
def.setName("SomeTxName");
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status = transactionManager.getTransaction(def);
try { 

// execute your business logic here
//db operation
} catch (Exception ex) { 

transactionManager.rollback(status);
throw ex;
}
}
} // 此代码案例来自Alibaba Coding Guidelines

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179398.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Spring事务回滚
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档