SpringBoot学习笔记(8):事物处理
SpringBoot学习笔记(8):事物处理
快速入门
在传统的JDBC事务代码开发过程中,业务代码只有一部分,大部分都是与JDBC有关的功能代码,比如数据库的获取与关闭以及事务的提交与回滚、大量的try..catch..finally语句。
Spring Boot利用AOP为我们提供了一个数据库事务的约定流程。通过这个约定流程就可以减少大量的冗余代码和一些没必要的异常捕获语句,让开发者更加集中于业务的开发,而不是反复编写如数据库的获取与关闭以及事务的提交与回滚、大量的try..catch..finally语句等。即只要我们遵循约定,就可以把自己开发的代码织入约定的流程中。
下图为Spring数据库事务约定:
声明式事务
通过使用@Transactional标注告诉Spring在什么地方启用数据库事务功能。这个注解可以标注在类或者方法上,标注在类上表示这个类所有功能非静态的方法都启用事务功能。
在Spring Boot中,当我们使用了spring-boot-starter-jdbc或spring-boot-starter-data-jpa依赖的时候,框架会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager。所以我们不需要任何额外配置就可以用@Transactional注解进行事务的使用。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
示例
添加注解1:@EnableTransactionManagement启动事物管理器
@SpringBootApplication
@EnableTransactionManagement
public class MsSupplyAndSaleApplication {public static void main(String[] args) {SpringApplication.run(MsSupplyAndSaleApplication.class, args);}
}
添加注解2:@Transaction在方法或类上启动事物处理
@Service
public class GoodsService {@Autowiredprivate GoodsMapper goodsMapper;@Transactionalpublic void addGoods(Goods goods){goodsMapper.addGoods(goods);}//....
}
隔离级别
隔离级别是指若干个并发的事务之间的隔离程度,与我们开发时候主要相关的场景包括:脏读取、重复读、幻读。
DEFAULT
:这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是:READ_COMMITTED
。READ_UNCOMMITTED
:该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。该级别不能防止脏读和不可重复读,因此很少使用该隔离级别。READ_COMMITTED
:该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。REPEATABLE_READ
:该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。即使在多次查询之间有新增的数据满足该查询,这些新增的记录也会被忽略。该级别可以防止脏读和不可重复读。SERIALIZABLE
:所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。
指定事物的隔离级别:
@Transactional(isolation = Isolation.DEFAULT)
传播行为
所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。
REQUIRED
:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。SUPPORTS
:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。MANDATORY
:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。REQUIRES_NEW
:创建一个新的事务,如果当前存在事务,则把当前事务挂起。NOT_SUPPORTED
:以非事务方式运行,如果当前存在事务,则把当前事务挂起。NEVER
:以非事务方式运行,如果当前存在事务,则抛出异常。NESTED
:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于REQUIRED
。
指定事物的传播行为:
@Transactional(propagation = Propagation.REQUIRED)
转载于:https://www.cnblogs.com/MrSaver/p/8723559.html
SpringBoot学习笔记(8):事物处理相关推荐
- springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题
springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题 参考文章: (1)springboot学习笔记:12.解决springboot打成可执行jar在 ...
- SpringBoot学习笔记(3):静态资源处理
SpringBoot学习笔记(3):静态资源处理 在web开发中,静态资源的访问是必不可少的,如:Html.图片.js.css 等资源的访问. Spring Boot 对静态资源访问提供了很好的支持, ...
- springboot学习笔记(五)
一丶注值方式 1.在application.properties文件中注值 首先我们将application.yml中的学生名字和年龄给注释掉,来验证在applic.properties的注值方式. ...
- SpringBoot学习笔记(4)----SpringBoot中freemarker、thymeleaf的使用
1. freemarker引擎的使用 如果你使用的是idea或者eclipse中安装了sts插件,那么在新建项目时就可以直接指定试图模板 如图: 勾选freeMarker,此时springboot项目 ...
- SpringBoot学习笔记(16):单元测试
SpringBoot学习笔记(16):单元测试 单元测试 单元测试(英语:Unit Testing)又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.程序单元是应用的最小 ...
- SpringBoot学习笔记(9)----SpringBoot中使用关系型数据库以及事务处理
在实际的运用开发中,跟数据库之间的交互是必不可少的,SpringBoot也提供了两种跟数据库交互的方式. 1. 使用JdbcTemplate 在SpringBoot中提供了JdbcTemplate模板 ...
- SpringBoot学习笔记(16)----SpringBoot整合Swagger2
Swagger 是一个规范和完整的框架,用于生成,描述,调用和可视化RESTful风格的web服务 http://swagger.io Springfox的前身是swagger-springmvc,是 ...
- SpringBoot学习笔记(4):自定义的过滤器
SpringBoot:学习笔记(4)--自定义的过滤器 快速开始 SpringBoot提供的前端控制器无法满足我们产品的需求时,我们需要添加自定义的过滤器. 在SpringBoot的开发中,我们应该还 ...
- 2.6 springBoot学习笔记(2.6)——- 整合mybatisPlus
更多文章 更多系列文章在个人网站 springBoot学习系列笔记文章 springBoot学习笔记(1)-- 搭建springBoot项目 文章目录 更多文章 springBoot学习系列笔记文章 ...
最新文章
- P2B: Point-to-Box Network 点云目标跟踪(CVPR 2020)
- seq2seq里的数学
- C++:49---继承中的友元
- linux/shell相关知识点
- java 微信开发收到乱码,微信公众号发送模板消息中文乱码(java)
- pythonsupermro_Python高级编程之继承问题详解(super与mro)
- Python基础-列表(列表常用函数/列表遍历)
- 关于java垃圾回收器(GC)的一些基础知识
- java 事件cancel_Activiti结束事件(End Event)
- 安卓交换位置动画_好马配好鞍,OriginOS系统让安卓系统大变样
- QTextBrowser显示html文件内容
- 盘点国外知名量化基金
- 自然语言处理--信息模型
- 《计算机视觉之目标检测》IOU详解及代码
- 越狱第四季下载(PMP)
- NetSpot Pro for Mac(最好用的wifi检测软件)
- Unity中使用软连接快速切换平台
- 从输入url到页面渲染完成经历的那些事~
- WBO第一届世界区块链高峰论坛在香港国际亚洲博览馆正隆重举行
- 基于javaweb的医疗设备管理系统
热门文章
- 计算机一级某学校师资情况表,2011年计算机一级考试MS OFFICE上机考试指导
- Android Studio 内存不足
- JavaScript————FormData实现多文件上传
- grub shell 错误_各种情况GRUB损坏进不了系统的解决方案
- php class使用方法,PHP调试类Krumo使用教程
- 怎么分辨学校计算机sql版本,怎么筛选出每个年级每个学校有多少个班级
- mysql安装包没有安装程序_MySQL5.6的zip包安装教程详解
- vscode删除文件夹,VSCode:删除文件中的所有注释
- Java 获取文件目录最终的修改时间
- 计算机操作安全协议,安全协议操作语义模型研究及应用-计算机软件与理论专业论文.docx...