首页 > 编程语言 > 详细

Spring框架系列(六)--事务Transaction

时间:2019-06-06 14:01:45      阅读:143      评论:0      收藏:0      [点我收藏+]

事务在企业日常开发中几乎是一定会遇到的,一般就是开启事务支持,然后@Transactional,但是事务不仅仅是这些,可以了解一下细节

事务:

  说白了就是一系列操作要么成功,要么失败,最典型的场景就是转账

事务四大特性:ACID

1、原子性(Atomicity):

  事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全失败

2、一致性(Consistency):

  一旦事务完成(不管成功还是失败),系统必须确保它处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏

3、隔离性(Isolation):

  多个事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏

4、持久性(Durability):

  一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写

到持久化存储器中

事务三大要素

  1、DataSource:事务的真正处理者,如MySQL等

  2、TransactionManager:管理事务的处理过程,如打开、提交、回滚

  3、事务应用和属性配置:作为一个标识符表明哪些方法要参与事务,一些配置:隔离级别、超时时间等

核心接口

Spring事务设计的接口如下:

技术分享图片

事务管理器

  Spring并不直接管理事务,而是提供了多种事务管理器,他们将事务管理的职责委托给Hibernate或者JTA等持久化机制所提供的相关平台框架

的事务来实现

PlatformTransactionManager:

  Spring事务管理器的接口,通过这个接口,JDBC、Hibernate等提供了对应的任务管理器,进行具体的实现

具体代码:

public interface PlatformTransactionManager {
    //由TransactionDefinition得到TransactionStatus对象
    TransactionStatus getTransaction(@Nullable TransactionDefinition definition) throws TransactionException;
    //提交事务
    void commit(TransactionStatus status) throws TransactionException;
    //回滚事务
    void rollback(TransactionStatus status) throws TransactionException;
}

1、jdbc事务

  如果应用程序中直接使用JDBC来进行持久化,DataSourceTransactionManager会为你处理事务边界。为了使用DataSourceTransactionManager

,你需要使用如下的XML将其装配到应用程序的上下文定义中:

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource" />
</bean>

  实际上,DataSourceTransactionManager是通过调用java.sql.Connection来管理事务,而后者是通过DataSource获取到的。通过调用连接的

commit()方法来提交事务,同样,事务失败则通过调用rollback()方法进行回滚。

2、Hibernate事务

  如果应用程序的持久化是通过Hibernate实习的,那么你需要使用HibernateTransactionManager。对于Hibernate3,需要在Spring上下文定义

中添加如下的<bean>声明:

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
       <property name="sessionFactory" ref="sessionFactory" />
</bean>

  sessionFactory属性需要装配一个Hibernate的session工厂,HibernateTransactionManager的实现细节是它将事务管理的职责委托给

org.hibernate.Transaction对象,而后者是从Hibernate Session中获取到的。当事务成功完成时,HibernateTransactionManager将会调用

Transaction对象的commit()方法,反之,将会调用rollback()方法。

3、Java持久化API事务(JPA)

  Hibernate多年来一直是事实上的Java持久化标准,但是现在Java持久化API作为真正的Java持久化标准进入大家的视野。如果你计划使用JPA

的话,那你需要使用Spring的JpaTransactionManager来处理事务。你需要在Spring中这样配置JpaTransactionManager:

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
       <property name="sessionFactory" ref="sessionFactory" />
</bean>

  JpaTransactionManager只需要装配一个JPA实体管理工厂(javax.persistence.EntityManagerFactory接口的任意实现)。

JpaTransactionManager将与由工厂所产生的JPA EntityManager合作来构建事务。

4、Java原生API事务

  如果你没有使用以上所述的事务管理,或者是跨越了多个事务管理源(比如两个或者是多个不同的数据源),你就需要使用

JtaTransactionManager:

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
       <property name="transactionManagerName" value="java:/TransactionManager" />
</bean>

  JtaTransactionManager将事务管理的责任委托给javax.transaction.UserTransaction和javax.transaction.TransactionManager对象,其中

事务成功完成通过UserTransaction.commit()方法提交,事务失败通过UserTransaction.rollback()方法回滚。

基本事务属性的定义

  上面讲到的事务管理器接口PlatformTransactionManager通过getTransaction(TransactionDefinition definition)方法来得到事务,这个

方法里面的参数是TransactionDefinition类,这个类就定义了一些基本的事务属性。

  事务属性可以理解成事务的一些基本配置,描述了事务策略如何应用到方法上。事务属性包含了5个方面,如图所示:

技术分享图片

TransactionDefinition代码

public interface TransactionDefinition {
    int getPropagationBehavior();   // 返回事务的传播行为
    int getIsolationLevel();      // 返回事务的隔离级别,事务管理器根据它来控制另外一个事务可以看到本事务内的哪些数据
    int getTimeout();          // 返回事务必须在多少秒内完成
    boolean isReadOnly();       // 事务是否只读,事务管理器能够根据这个返回值进行优化,确保事务是只读的
}

Spring定义了七种传播行为:

技术分享图片

具体内容可参考:https://www.open-open.com/lib/view/open1350865116821.html

隔离级别

  定义了一个事务可能受其他并发事务影响的程度

 

 

原文地址:https://blog.csdn.net/trigl/article/details/50968079

 

Spring框架系列(六)--事务Transaction

原文:https://www.cnblogs.com/huigelaile/p/10983982.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!