作者:Guide哥
事务概念回顾
什么是事务?事务是逻辑上的一组操作,要么都执行,要么都不执行.
事物的特性(ACID):
文章插图
- 原子性: 事务是最小的执行单位,不允许分割 。事务的原子性确保动作要么全部完成,要么完全不起作用;
- 一致性: 执行事务前后,数据保持一致;
- 隔离性: 并发访问数据库时,一个用户的事物不被其他事物所干扰,各并发事务之间数据库是独立的;
- 持久性: 一个事务被提交之后 。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响 。
Spring事务管理接口:
- PlatformTransactionManager: (平台)事务管理器
- TransactionDefinition: 事务定义信息(事务隔离级别、传播行为、超时、只读、回滚规则)
- TransactionStatus: 事务运行状态
PlatformTransactionManager接口介绍Spring并不直接管理事务,而是提供了多种事务管理器 ,他们将事务管理的职责委托给Hibernate或者JTA等持久化机制所提供的相关平台框架的事务来实现 。Spring事务管理器的接口是: org.springframework.transaction.PlatformTransactionManager ,通过这个接口,Spring为各个平台如JDBC、Hibernate等都提供了对应的事务管理器,但是具体的实现就是各个平台自己的事情了 。
PlatformTransactionManager接口代码如下:PlatformTransactionManager接口中定义了三个方法:
Public interface PlatformTransactionManager()...{// Return a currently active transaction or create a new one, according to the specified propagation behavior(根据指定的传播行为,返回当前活动的事务或创建一个新事务 。)TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;// Commit the given transaction, with regard to its status(使用事务目前的状态提交事务)Void commit(TransactionStatus status) throws TransactionException;// Perform a rollback of the given transaction(对执行的事务进行回滚)Void rollback(TransactionStatus status) throws TransactionException;}
我们刚刚也说了Spring中PlatformTransactionManager根据不同持久层框架所对应的接口实现类,几个比较常见的如下图所示文章插图
比如我们在使用JDBC或者iBatis(就是Mybatis)进行数据持久化操作时,我们的xml配置通常如下:
<!-- 事务管理器 --> <bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!-- 数据源 --><property name="dataSource" ref="dataSource" /> </bean>
TransactionDefinition接口介绍事务管理器接口 PlatformTransactionManager 通过 getTransaction(TransactionDefinition definition) 方法来得到一个事务,这个方法里面的参数是 TransactionDefinition类 ,这个类就定义了一些基本的事务属性 。
那么什么是事务属性呢?
事务属性可以理解成事务的一些基本配置,描述了事务策略如何应用到方法上 。事务属性包含了5个方面 。
文章插图
TransactionDefinition接口中的方法如下:TransactionDefinition接口中定义了5个方法以及一些表示事务属性的常量比如隔离级别、传播行为等等的常量 。
我下面只是列出了TransactionDefinition接口中的方法而没有给出接口中定义的常量,该接口中的常量信息会在后面依次介绍到 。
public interface TransactionDefinition {// 返回事务的传播行为int getPropagationBehavior();// 返回事务的隔离级别,事务管理器根据它来控制另外一个事务可以看到本事务内的哪些数据int getIsolationLevel();// 返回事务必须在多少秒内完成//返回事务的名字String getName();int getTimeout();// 返回是否优化为只读事务 。boolean isReadOnly();}
(1)事务隔离级别(定义了一个事务可能受其他并发事务影响的程度):我们先来看一下 并发事务带来的问题 ,然后再来介绍一下 TransactionDefinition 接口 中定义了五个表示隔离级别的常量 。
推荐阅读
- 补水|30-50岁必备的护肤品套装排行榜 美白补水抗衰老 年轻漂亮不会老
- 借条丢了要不回钱?还有这些补救措施可能可以帮到你
- 面对降职降薪,单位、员工如何操作才是最佳选择?
- 油麦菜|阿娇瘦身变漂亮,扎小啾啾看不出年龄,就是穿的太舒适不时髦
- 饵料|用蚯蚓钓鱼怎么调漂?跑铅配合好这两种打窝方式,钓得就比别人多
- 野葛根是什么东西呢
- 数据库连接池到底应该设多大?这篇文章可能会颠覆你的认知
- 茵陈五苓散
- 量子计算何时投入实用? 光子可能是个关键角色
- 跑步前可以吃一些东西吗