【springboot事物管理@Transactional】看了一下springboot的事物办理 , 今天总结一下 , 记实一下利用的体例 , 很简单 , 一个简单的注解就可以搞定了 , @Transactional
颠末测试发现:
(1)若是不加Transactional注解 , 则对数据库的操作会当即更新 , 之后若是抛出异常也不会回滚;申明 , 默认环境下 , 是没有事物的 。
(2)若是加上Transactional注解 , 在数据库更新语句之后抛出RuntimeException , 则会更新不当作功 , 申明 , 事物生效了 。
(3)一个重点:当利用事物时 , 呈现了RuntimeException和Error时 , 则事物会回滚 。 checked exceptions不会回滚(因为java强制对会抛出checked exceptions的代码利用try catch;想回滚 , 可以在catch中抛出前面的异常和错误)
(4)下面经由过程源码简单的总结Transactional注解的默认设置装备摆设 , 及测试的过程 。
需要这些哦
Transactional
ecplise
方式/
1先看Transactional注解的源码
(1)源码注释中说:当利用了此注解 , 碰到了RuntimeException和Error时会回滚 。 checked exceptions不会回滚 。
文章插图
2(2)按照Target属性可知 , 这个注解可以用于润色方式、类、接口(包罗注解)、列举类型;一般环境下 , 最好用到service层的方式上 , 一个营业一个事物 。
文章插图
3(3)默认的事物传布机制:REQUIRED 。 当前没有事物则开启一个新的事物;当前有事物则插手到这个已有的事物中 。
文章插图
4(4)只读事物Transactional(readOnly=true):其实一向质疑只读事务的感化(一向觉着没啥用) , 然后网上找了一下都说是因为 , 统一个营业中对一条数据多次查询时 , 有可能这多次查询的时候距离中该数据被其他用户点窜 , 导致前后查询到的数据纷歧致 , 想想很有事理;用只读事物就可以解决这个问题 , 包管数据的前后一致性 。 (若是想避免这个问题 , 也在代码中只读一次 , 避免多次读) 。
文章插图
5然后测试Transactional注解的感化:
(1)不开启事物 , 在保留方式中抛出RuntimeException , 发现可以保留数据 。
文章插图
文章插图
文章插图
6(2)开启事物 , 在保留方式中抛出RuntimeException , 发现此时保留不了数据 。
推荐阅读
- 安卓手机通过wifi和电脑传文件电脑管理手机文件
- 添加或删除 怎么管理搜狗浏览器的拓展程序
- 谷歌浏览器怎么管理网站中自动填充的密码
- 建筑工程施工安全管理主要内容
- 怎么搭建一款免费的客户关系管理系统
- 隧道人员定位管理为什么要选择uwb定位技术
- 在AI中如何管理图层?
- 华为P9如何节省流量?如何管理流量
- 华为P9如何通过手机管家管理系统/流量/应用权限
- 运营者 微信公众号怎么添加多个管理员