• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

深入理解spring事务

java 搞代码 4年前 (2022-01-09) 12次浏览 已收录 0个评论

事务介绍

一个事务要么同时成功,要么同时失败

特性

  • Atomic原子性 事务是由一个或多个活动组成的一个工作单元。原子性确保事务中的所有操作全部发生或全部不发生
  • Consistent一致性 一旦事务完成,系统必须确保它所建模的业务处于一致的状态
  • Isolated隔离性 事务允许多个用户对数据进行操作,每个用户的操作不会与其他用户纠缠在一起
  • Durable持久性 一旦事务完成,事务的结果应该持久化

事务隔离级别

  • DEFAULT 使用底层数据库预设的隔离层级
  • READ_UNCOMMITTED (读未提交的数据) 允许事务读取其他并行的事务还没提交的数据,脏读、不可重复读、幻读问题都存在
  • READ_COMMITTED(读已提交的数据) 只允许事务读取其他并行事务提交的数据,可以避免脏读,但是不可重复读和幻读仍存在
  • REPEATABLE_READ(可重复读) 确保事务可以多次从一个字段中读取相同的值,在这个事务持续期间,禁止其他事务对这个字段进行更新,可以避免脏读和不可重复读,但幻读仍存在(Mysql默认的事务隔离级别)
  • SERIALIZABLE(串行化) 确保事务可以从一个表中读取相同的行,在这个事务持续期间,禁止其他事务对该表执行插入、更新和删除操作,所有并发问题都可以避免,但是性能低下

传播行为

  • PROPAGATION_REQUIRED 支持当前事务,如果当前没有事务,就新建一个事务
  • PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行
  • PROPAGATION_MANDATORY 支持当前事务,如果当前没有事务,就抛出异常
  • PROPAGATION_REQUIRED_NEW 新建事务,如果当前存在事务,把当前事务挂起
  • PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
  • PROPAGATION_NEVER 以非事务方式执行操作,如果当前存在事务,则抛出异常
  • PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行,如果当前没有事务,则新建事务

只读

事务只进行读取操作

readOnly=true 告诉spring当前事务只会进行读取操作,不会进行修改操作,可以帮助数据库引擎优化

注:如果设置为只读的话,千万不要在事务里修改数据,使用只读操作时,spring不会进行加锁处理,如果修改数据的话,会出现问题

事务超时

事务时间过长,则回滚

回滚规则

rollback-for 指事务对于那些检查型异常应当回滚而不提交(默认spring会对所有的运行时异常回滚)

no-rollback-for 指事务对于那些异常继续执行不回滚

事务的使用

create table user(
 id int primary key AUTO_INCREMENT,
 name varchar(20) not null,
 account double 
 )ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
 insert into user (name,account) values('张三',1000);
 insert into user (name,account) values('李四',1000);<br />
<!-- 事务 -->
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-tx</artifactId>
 <version>4.3.29.RELEASE</version>
</dependency>

<!-- 事务管理器以及数据源 -->
<depe<p style="color:transparent">本文来源gao!%daima.com搞$代*!码$网3</p>ndency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-jdbc</artifactId>
 <version>4.3.29.RELEASE</version>
</dependency>

<!-- mysql驱动 -->
<dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>5.1.48</version>
</dependency>

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:深入理解spring事务

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址