spring事务回滚机制_事务回滚失败
2023-06-13 09:14:23 时间
Spring事务回滚
使用 @Transaction
来配置自动回滚,可以配置在类上,也可以配置在方法上(作用域不同),但对final或private修饰的方法无效,且该类必须是受spring所管控的。
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Override
public void save(User user) {
//some code
//db operation
}
}
若被配置的方法或类抛出了异常,则事务会被自动回滚,除非你在该方法中手动捕获了异常。可以使用 @Transactional(rollbackFor = Exception.class)
来设定针对特定的异常进行事务回滚,如果不设置则默认会回滚 RuntimeException and Error (参考自源码内文档)。
@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后,进行手动回滚。
@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
相关文章
- Spring学习笔记(一)——Spring介绍及工厂模式解耦
- spring事务隔离级别、传播机制以及简单配置_mysql查看事务隔离级别
- Spring 全家桶之 Spring Framework 5.3(二)- Part A
- Spring MVC更多家族成员----文件上传---06
- 聊聊spring事务失效的12种场景,太坑了
- Spring事务隔离级别与数据库隔离级别不一致时,该以谁为准?
- spring boot整合shiro_Spring框架介绍及使用
- 8-Spring事务控制
- Spring常用事务传播特性
- 【11】Spring源码-分析篇-事务源码分析
- 你真的懂Spring Cloud+Nginx秒杀实战,Nginx高性能秒杀和限流吗?
- Spring启动过程中实例化部分代码的分析(Bean的推断构造方法)
- Spring Boot Starters介绍[通俗易懂]
- 一文讲透Spring的IOC反转控制
- 面试题:Spring 事务的实现方式和实现原理?
- 麻了!Spring Boot 从 2.2.5 升级到 2.7.2 之后,一堆BUG
- 记录一次Spring事务线上异常
- Spring:声明式事务
- [Redis]Spring Boot中Redis Template集群配置
- Java 近期新闻:Gradle 8.0、Maven、Payara 平台、Piranha、Spring Framework
- Java 近期新闻:MicroProfile 6.0、Kotlin 1.8、Spring Framework 升级
- Spring Cloud Security配置OAuth2客户端来访问受保护的API
- Spring事务(Transaction)
- 深入理解 Spring 事务原理详解编程语言
- spring笔记二详解编程语言
- Spring事务的一些特性详解编程语言
- Spring框架下整合Redis的实现(spring整合redis)