Spring Boot 25——事物管理

事物概念

        我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步操作的结合。由于数据操作在顺序执行
的过程中,任何一步操作都有可能发生异常,异常会导致后续操作无法完成,此时由于业务逻辑并未正确的完成,
之前成功操作数据的并不可靠,需要在这种情况下进行回退。
        事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都必须成功执行,只要有发生异常就
回退到事务开始未进行操作的状态。
        事务管理是Spring框架中最为常用的功能之一,我们在使用Spring Boot开发应用时,大部分情况下也都需要使用
事务。

事物管理

       在Spring Boot中,当我们使用了spring-boot-starter-jdbc或spring-boot-starter-data-jpa依赖的时候,框架会自
动默认分别注入DataSourceTransactionManager或JpaTransactionManager。所以我们不需要任何额外配置就可
以用@Transactional注解进行事务的使用。

       创建Service层

       开启注解方式事物支持

       注意:在Hibernate创建表时,默认创建表类型是MyISAM,是非事务安全的,所以无法实现事物回滚; Innodb才可以进行对事物的回滚。需要指定 spring.jpa.database-platform=org.hibernate.dialect.MySQL57Dialect

事物隔离级别

       隔离级别是指在发生并发的事务之间的隔离程度,与我们开发时候主要相关的场景包括:脏读、不可重复读、幻
读。
       脏读:A事务执行过程中修改了id=1的数据,未提交前,B事务读取了A修改的id=1的数据,而A事务却回滚了,这
样B事务就形成了脏读。
       不可重复读:A事务先读取了一条数据,然后执行逻辑的时候,B事务将这条数据改变了,然后A事务再次读取的时
候,发现数据不匹配了,就是所谓的不可重复读了。
       幻读:A事务先根据条件查询到了N条数据,然后B事务新增了M条符合A事务查询条件的数据,导致A事务再次查询
发现有N+M条数据了,就产生了幻读。

       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)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值