面试突击82:SpringBoot 中如何操作事务?
在 Spring Boot 中操作事务有两种方式:编程式事务或声明式事务,接下来我们一起来看二者的具体实现。
1.编程式事务
在 Spring Boot 中实现编程式事务又有两种实现方法:
- 使用 TransactionTemplate 对象实现编程式事务;
- 使用更加底层的 TransactionManager 对象实现编程式事务。
它们的具体实现代码如下。
1.1 TransactionTemplate 使用
要使用 TransactionTemplate 对象需要先将 TransactionTemplate 注入到当前类中 ,然后再使用它提供的 execute 方法执行事务并返回相应的执行结果,如果程序在执行途中出现了异常,那么就可以使用代码手动回滚事务,具体实现代码如下:
1.2 TransactionManager 使用
TransactionManager 实现编程式事务相对麻烦一点,它需要使用两个对象:TransactionManager 的子类,加上 TransactionDefinition 事务定义对象,再通过调用 TransactionManager 的 getTransaction 获取并开启事务,然后调用 TransactionManager 提供的 commit 方法提交事务,或使用它的另一个方法 rollback 回滚事务,它的具体实现代码如下:
从上述代码可以看出,使用编程式事务更加灵活,但写法比较麻烦。
2.声明式事务
声明式事务的实现比较简单,只需要在方法上或类上添加 @Transactional 注解即可,当加入了 @Transactional 注解就可以实现在方法执行前,自动开启事务;在方法成功执行完,自动提交事务;如果方法在执行期间,出现了异常,那么它会自动回滚事务。
它的具体使用如下:
当然,@Transactional 支持很多参数的设置,它的参数设置列表如下:
参数的设置方法如下:
总结
本文我们介绍了两种事务的实现方式:编程式事务或声明式事务。其中编程式事务又分为两种实现:使用 TransactionTemplate 对象或更加底层的 TransactionManager 对象分别实现编程式事务,它们的优点是灵活性更高,可以在任何代码片段上添加事务;而声明式事务的实现更加简单,只需要在类或方法上添加 @Transactional 注解即可实现事务的自动开启和提交(以及回滚)。
是非审之于己,毁誉听之于人,得失安之于数。
公众号:Java面试真题解析
最新文章
- 【WP 8.1开发】How to 图像处理
- XIB 上的控件不显示怎么办
- Qt 之 饼图
- [Nhibernate]二级缓存(二)
- Visual Studio 2012 常用快捷键
- (int &;)a 和(int)a
- JSP SQL注入
- codeforces 508D . Tanya and Password 欧拉通路
- twrp 2.7.0 ui.xml简单分析,布局讲解,第一章
- Android 禁止屏幕休眠和锁屏的方法
- Github最流行的10,000个Java项目使用的类库
- 【算法】BILSTM+CRF中的条件随机场
- js发布订阅模式实现
- vs code 设置问题
- 兼容ie,火狐的判断回车键js脚本
- C++学习基础十七-- 函数指针
- Confluence 6 空间标识
- fis代码压缩
- git学习笔记(四)—— 分支管理
- 分析maven的优点
热门文章
- python小题目练习(七)
- Python制作手游《和平精英》游戏资料查询助手
- windows版anaconda+CUDA9.0+cudnn7+pytorch+tensorflow安装
- SELECT 的6大子句
- 2019 CSP-J 初赛解析
- 集合-Collection工具类
- The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 40976EAF437D05B5 NO_PUBKEY 3B4FE6ACC0B21F32
- vue 调用nginx服务跨越的问题
- Mvcapi解决H5请求接口跨域问题
- for_in循环