美文网首页
Spring事务机制

Spring事务机制

作者: steamed_bun | 来源:发表于2017-03-10 11:59 被阅读0次

1、申明式事务

a.准备一个方法,例如购买书本,同时需要将库存和用户余额进行修改。
b.在xml中作如下配置:

<!-- 配置事务注解管理器 -->
<bean id="transactionManager" 
           class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 启用事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

c.在需要开启事务的方法上添加事务标签:即同时进行上述a中两个操作的方法。

@Transactional
public void checkOut(String userName, List<String> isbns) {}

2、事务的传播行为

事务传播属性可以在 @Transactional 注解的 propagation 属性中定义,默
认为REQUIRED

@Transactional(propagation=Propagation.REQUIRED )
1)、REQUIRED具体如下:
来自尚硅谷

详解:
|---即purchase()方法与checkout()都添加了事务,但只走checkout()的事务,即如果在checkout()执行的过程发生任何异常都会回滚到checkout()的开始。
|---形象一点就是,purchase()购买第一本书书时没有发生异常,但购买第二本书时发生异常,则会回滚到一本书都没买的时候。

2)、REQUIRES_NEW 具体如下:
来自尚硅谷

|----即purchase()方法与checkout()都添加了事务,两个事务都会进行
purchase()方法开始时,会开启其自己的事务,而checkout()的事务就会挂起
等purchase()方法的事务结束后,才会继续checkout()的事务
这样就会导致如果purchase()方法如果出现异常只会回滚到当前purchase()方法未执行以前,而不是整个checkout()未执行以前。
|----形象一点就是,purchase()购买第一本书书时没有发生异常,但购买第二本书时发生异常,则会回滚到第一本书购买完成之后,即第一本书是真正的购买成功。

3)、支持的传播行为有:
来自尚硅谷

3、事务的隔离级别

1)、脏读

对于两个事务T1,T2,T1读取了已经被T2更新但还没有被提交的字段。之后, 若T2回滚,T1读取的内容就是临时且无效的。

2)、不可重复读

对于两个事务T1,T2,T1读取了一个字段,然后T2 更新了该字段。之后,T1再次读取同一个字段,值就不同了。

3)、幻读

对于两个事务T1,T2,T1从一个表中读取了一个字段, 然后T2在该表中插入了一些新的行。之后,如果T1再次读取同一个表, 就会多出几行.

4)、@Transactional

用 @Transactional 注解声明式地管理事务时可以在 @Transactional 的 isolation 属性中设置隔离级别.

@Transactional(isolation=Isolation.READ_COMMITED )
来自尚硅谷

最常用的就是READ_COMMITED 读已提交
注:事务的隔离级别要得到底层数据库引擎的支持, 而不是应用程序或者框架的支持.
Oracle 支持的 2 种事务隔离级别:READ_COMMITED , SERIALIZABLE
Mysql 支持 4 中事务隔离级别.

5)、超时和只读属性可以在 @Transactional 注解中定义.超时属性以秒为单位来计算.
@Transactional(propagation=Propagation.REQUIRES_NEW,
isolation=Isolation.READ_COMMITTED,readOnly=false,timeout=3)
public void purchase(String username, String isbn) {}

4、在xml文件里配置事务的属性

<!-- 配置事务属性 -->
<tx:advice transaction-manager="transactionManager"  id="txadvice">
    <tx:attributes>
        <tx:method name="purchase" propagation="REQUIRED"/>
        <tx:method name="*"/>   
        </tx:attributes>
    </tx:advice>    
<aop:config>
<!-- 配置切入点,需将所有要添加切入点的类放在统一包下,以便于写路径 ,一般在service包下-->
    <aop:pointcut expression="execution( * 包名.service.*.*(..))" id="txPointCut"/>
    <!-- 将配置的事务与切入点关联起来 -->
    <aop:advisor advice-ref="txadvice" pointcut-ref="txPointCut"/>
</aop:config>

相关文章

  • 4.Spring Boot的事务机制及缓存

    1.Spring Boot事务机制 所有的数据访问技术都有事务处理机制,而Spring的事务机制是用统一的机制来处...

  • Spring中的AOP事务

    【目录】1 Spring的事务管理机制2 Spring事务管理两种方式 1 Spring的事务管理机制 Sprin...

  • 问题记录

    面试题记录 spring spring事务传播机制和隔离级别? spring支持的事务类型? 什么是 Spring...

  • Spring 事务

    ** 但是Spring事务有自己的特点,也就是事务传播机制。** ** 所谓事务传播机制,也就是在事务在多个...

  • 有关Spring事务,看这一篇就足够了

    本文将按照声明式事务的五个特性进行介绍: 事务传播机制 事务隔离机制 只读 事务超时 回滚规则 Spring事务传...

  • Spring事务传播机制

    1.Spring事务执行的原理; Spring事务使用AOP的机制实现,会在@Transcactional注解修饰...

  • Spring事务(一)

    Spring事务的实现原理: Spring事务底层是基于数据库事务和AOP机制的 ⾸先对于使⽤了@Transact...

  • SSM spring 2

    1 Spring 事务实现方式、事务的传播机制、默认的事务类别 Spring事务的1+3种实现方式、7种传播行为、...

  • Spring 事务机制详解

    Spring事务机制主要包括声明式事务和编程式事务 Spring声明式事务时,有一个非常重要的概念就是事务属性。事...

  • SpringMVC声明式事务配置

    Spring 的事务管理机制用处在于保证数据统一性在事务执行过程中如果出现报错,Spring 的事务管理机制会回滚...

网友评论

      本文标题:Spring事务机制

      本文链接:https://www.haomeiwen.com/subject/qiungttx.html