1

Spring的事务管理机制

 1 year ago
source link: https://blog.51cto.com/u_15558033/5691018
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Spring的事务管理机制

推荐 原创

苦糖? 2022-09-20 09:12:07 ©著作权

文章标签 事务管理 spring 隔离级别 文章分类 Java 编程语言 yyds干货盘点 阅读数249

PlatformTransactionManager事务管理器

​参考:spring-framework-4.2.4.RELEASE/docs/javadoc-api/index.html​

Spring的事务管理机制_事务管理

该接口提供三个方法:

  • commit:提交事务
  • rollback:回滚事务
  • getTransaction:获取事务状态

Spring为不同的持久化框架提供了不同PlatformTransactionManager接口实现:

Spring的事务管理机制_spring_02
Spring的事务管理机制_spring_03

DataSourceTransactionManager针对JdbcTemplate、MyBatis 事务控制 ,使用Connection(连接)进行事务控制 :

开启事务 connection.setAutoCommit(false);

提交事务 connection.commit();

回滚事务 connection.rollback();

事务管理器的选择?

用户根据选择和使用的持久层技术,来选择对应的事务管理器。

TransactionDefinition事务定义信息

用来定义事务相关的属性的,给事务管理器用。

参考:​​spring-framework-4.2.4.RELEASE/docs/javadoc-api/index.html​

Spring的事务管理机制_spring_04

该接口主要提供的方法:

getIsolationLevel:隔离级别获取

getPropagationBehavior:传播行为获取

getTimeout:获取超时时间(事务的有效期)

isReadOnly 是否只读(保存、更新、删除—对数据进行操作-变成可读写的,查询-设置这个属性为true,只能读不能写),事务管理器能够根据这个返回值进行优化。

这些事务的定义信息,都可以在配置文件中配置和定制。

事务的隔离级别IsolationLevel

Spring的事务管理机制_事务管理_05

脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。

不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。换句话说就是,后续读取可以读到另一事务已提交的更新数据。相反,“可重复读”在同一事务中多次读取数据时,能够保证所读数据一样,也就是,后续读取不能读到另一事务已提交的更新数据。

幻读:一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录。

事务四大特性 ACID —隔离性引发问题 ---- 解决事务的隔离问题 隔离级别

Mysql 默认隔离级别 REPEATABLE_READ

Oracle 默认隔离级别 READ_COMMITTED

事务的传播行为PropagationBehavior

什么是事务的传播行为? 有什么作用?

事务传播行为用于解决两个被事务管理的方法互相调用问题

Spring的事务管理机制_隔离级别_06

业务层两个方法面临的事务问题:

有些时候需要处于同一个事务(删除用户删除完成之后,需要同时删除用户对应的订单,需要事务回滚,例如商场工作人员删除订单业务),

有些时候不能在同一个事务(取款是一个事务操作,打印凭条是一个事务操作,例如ATM取款业务) !

事务的传播行为的7种类型:

Spring的事务管理机制_spring_07

Spring的事务管理机制_事务管理_08

TransactionStatus 事务状态

Spring的事务管理机制_事务管理_09

flush(),给hibernate使用,底层发出sql的

hasSavepoint():判断是否有保留点

isCompleted():判断事务是否结束

isNewTransaction():判断当前事务是否是新开的一个事务。

isRollbackOnly():判断事务是否只能回滚

setRollbackOnly():设置事务是否回滚

Spring事务管理两种方式

Spring 支持两种方式事务管理

一:编程式的事务管理

通过TransactionTemplate手动管理事务

在实际应用中很少使用,原因是要修改原来的代码,加入事务管理代码 (侵入性 )

参考文档:http://www.yiibai.com/spring/programmatic_management.htm

Spring的事务管理机制_事务管理_10

二:使用XML或注解配置声明式事务

  • Spring的声明式事务是通过AOP实现的(环绕通知)
  • ​开发中经常使用(代码侵入性最小)--推荐使用!​
  • 1收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK