精华内容
下载资源
问答
  • Spring声明式事务管理、事务的传播行为xml配置

     

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

     1. <tx:method name="insert*" propagation="REQUIRED" />中name的值是ServiceImpl中各个要加入事物管理的方法的方法名。

     

    <!--  
    	 	 事务管理: Spring声明式事务管理 。
    	 	 spring默认的事务隔离级别是用的数据库的默认事务隔离级别,不同数据库级别也不尽相同。
    	 	 使用事务,要引入aop和tx的命名空间 :即文件头第4行。
    	 	(开启注解事务,使用时在方法上加上注解@Transactional(...)即可 )
    	-->
    	<!-- 事务管理器 -->
    	<bean id="transactionManager"
    		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    		<property name="dataSource" ref="dataSource" />
    	</bean>
    
    	<!-- 通知传播行为 -->
    	<tx:advice id="txAdvice" transaction-manager="transactionManager">
    		<tx:attributes>
    			<tx:method name="insert*" propagation="REQUIRED" />
    			<tx:method name="delete*" propagation="REQUIRED" />
    			<tx:method name="upd*" propagation="REQUIRED" />
    			<!-- 只读表示对数据的操作是读取,报异常后不用回滚(不是只读的数据出异常,事务会回滚)。 -->
    			<tx:method name="select*" propagation="SUPPORTS" read-only="true" />
    			<tx:method name="get" propagation="SUPPORTS" read-only="true" />
    		</tx:attributes>
    	</tx:advice>
    	
    	<!-- 配置事务切入点 -->
    	<aop:config>
    	    <aop:pointcut id="servicePointcut" expression="execution(* com.service.impl..*ServiceImpl.*(..))"/>
    		<aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointcut"/>
    	</aop:config>

     

     

     

    2.  尽量把逻辑操作代码写到Service中,controller是没有纳入spring的事务管理的。出现异常不会回滚。

     

     

    3. 相关说明:

     

      
    spring中PROPAGATION类的事务属性详解
        PROPAGATION_REQUIRED: 
        支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 
        PROPAGATION_SUPPORTS:  
        支持当前事务,如果当前没有事务,就以非事务方式执行。 
        PROPAGATION_MANDATORY:   
        支持当前事务,如果当前没有事务,就抛出异常。 
        PROPAGATION_REQUIRES_NEW: 
        新建事务,如果当前存在事务,把当前事务挂起。
        PROPAGATION_NOT_SUPPORTED:
        以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 
        PROPAGATION_NEVER:       
        以非事务方式执行,如果当前存在事务,则抛出异常。 
        PROPAGATION_NESTED:  
        支持当前事务,如果当前事务存在,则执行一个嵌套事务,如果当前没有事务,就新建一个事务。


     

     



      
      

      
      
      


     

     

    展开全文
  • 事务 Spring事务管理 不考虑隔离引发问题 ...事务传播行为 演示环境搭建 编程式事务控制 XML配置声明式事务(原始方式) XML配置声明式事务(基于tx/aop) @注解配置声明式事务 总结 ...

    事务

    在这里插入图片描述
    在这里插入图片描述

    Spring事务管理

    在这里插入图片描述
    在这里插入图片描述

    不考虑隔离引发问题

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    隔离级别

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    事务传播行为

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    演示环境搭建

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    编程式事务控制

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    XML配置声明式事务(原始方式)

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    XML配置声明式事务(基于tx/aop)

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    @注解配置声明式事务

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    总结

    在这里插入图片描述

    展开全文
  • 这里写目录标题一、写在前言二、声明式事务(一)注解声明式事务使用1、事务传播行为(propagation)2、事务隔离级别(isolation)三、结束语 一、写在前言 二、声明式事务 (一)注解声明式事务使用 事务的底层是...

    大家好,我是被白菜拱的猪。

    一个热爱学习废寝忘食头悬梁锥刺股,痴迷于girl的潇洒从容淡然coding handsome boy。

    一、写在前言

    二、声明式事务

    (一)事务的四大特性

    事务的底层是AOP原理,有ACID(原子性,一致性,隔离性,持久性)Spring有事务管理器,是一个借口为每一个框架提供了实现类。

    ● 原子性(Atomicity):操作这些指令时,要么全部执行成功,要么全部不执行。只要其中一个指令执行失败,所有的指令都执行失败,数据进行回滚,回到执行指令前的数据状态。

    ● 一致性(Consistency):事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。
      eg:拿转账来说,假设用户A和用户B两者的钱加起来一共是20000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是20000,这就是事务的一致性。

    ● 隔离性(Isolation):隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

    即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。

    ● 持久性(Durability):当事务正确完成后,它对于数据的改变是永久性的。

    eg: 例如我们在使用JDBC操作数据库时,在提交事务方法后,提示用户事务操作完成,当我们程序执行完成直到看到提示后,就可以认定事务以及正确提交,即使这时候数据库出现了问题,也必须要将我们的事务完全执行完成,否则就会造成我们看到提示事务处理完毕,但是数据库因为故障而没有执行事务的重大错误。

    (二)注解声明式事务使用

    编程式事务是怎么使用呢?首先开启事务,然后业务代码,然后提交事务,业务代码出现异常则回滚事务,但是这样比较麻烦,Spring采用声明式事务,一个注解搞定。

    1、Spring配置文件创建事务处理器,指定数据源
    2、在Spring配置文件中引入名称空间tx
    3、开启事务注解
    4、在方法或类上写@Transactional

    下面对@Transactional注解中的方法进行讲解:
    在这里插入图片描述

    1、事务传播行为(propagation)

    Spring中有七种传播行为,就是当在一个方法中调用另一个方法时Spring是如何处理的。我们这里介绍常见的两种:

    • REQUIRED:先看看当前存不存在事务,假如存在事务的话就加进去,不存在就新建一个事务。
    • REQUIRES_NEW:不管当前有没有事务,都会创建一个新事物
    事务传播行为类型说明
    PROPAGATION_REQUIRED如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
    PROPAGATION_SUPPORTS支持当前事务,如果当前没有事务,就以非事务方式执行。
    PROPAGATION_MANDATORY使用当前的事务,如果当前没有事务,就抛出异常。
    PROPAGATION_REQUIRES_NEW新建事务,如果当前存在事务,把当前事务挂起。
    PROPAGATION_NOT_SUPPORTED以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
    PROPAGATION_NEVER以非事务方式执行,如果当前存在事务,则抛出异常。
    PROPAGATION_NESTED如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。

    2、事务隔离级别(isolation)

    我们前面讲过事务的性质ACID,所谓隔离性就是多个事务开启,互不影响,假如没有隔离性就会出现一系列的问题:脏读、不可重复读、虚(幻)读。

    • 脏读:就是一个未提交的事务读取到另一个未提交事务的数据。例如两个人(事务)都对同一个数据进行操作,小明想把它+50,小红想把它从100改到500,然后小明读取数据读到了小红改过的500,但小红有可能进行回滚,所以原先应该是100,而不是500。ai,本来读的不是你,然后读到了你,这不就是读错了嘛。
    • 不可重复读:一个未提交事务读取到另一提交事务修改数据。
    • 虚读:一个未提交数据读取到另一个提交事务添加数据。

    在这里插入图片描述

    那么如何避免这种情况产生呢,事务为我们提供了隔离级别,读未提交,读提交,重复读,序列化。
    在这里插入图片描述

    @Transactional(isolation = Isolation.READ_COMMITTED)
    
    

    3、超时时间(timeout)

    规定事务在设置的时间内提交,假如没有提交就回滚,默认值为-1,即不设置时间。

    4、是否只读(readOnly)

    read就是读即查询操作readOnly默认为false,即只能进行查询操作,readOnly = true,即增删改查都可以。

    5、rollbackFor

    设置出现哪些异常事务回滚

    6、norollbackFor

    设置出现哪些异常事务不回滚。

    (三)事务管理-XML方式

    分为三步:
    第一步: 配置事务管理器。
    第二步: 配置切面。
    第三步: 配置切入点和切面。

        <! -- 1 创建事务管理器 -- >
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><! -- 注入数据源
            -- >     <property name="dataSource" ref="dataSource"></property>
        </bean>
    
        <! -- 2 配置通知 -- >
        <tx:advice id="txadvice"><! -- 配置事务参数 -- >
            <tx:attributes><! -- 指定哪种规则的方法上面 添加事务 -- >
                <tx:method name="accountMoney" propagation="REQUIRED"/>
                <! --
                <tx:method name="account*"/>
                -- >
            </tx:attributes>
        </tx:advice>
    
        <! -- 3 配置切入点和切面 -- >
        <aop:config><! -- 配置切入点 -- >
            <aop:pointcut id="pt" expression="execution(* com.atguigu.spring5.service.UserService.*(..))"/>
            <! -- 配置切面 -- >
            <aop:advisor advice-ref="txadvice" pointcut-ref="pt"/>
        </aop:config>
    

    三、结束语

    最近学习超级懈怠啊,看来情感对学习影响还是相当大的…Spring基础部分就告一段落,IOC,AOP,事务,下面进行SpringBoot的学习。

    展开全文
  • 这是spring默认的传播行为。 NOT_SUPPORTED:声明方法不需要事务。如果方法没有关联到一个事务,容器不会为他开启事务,如果方法在一个事务中被调用,该事务会被挂起,调用结束后,原先的事务会恢复执行。 ...
    1. REQUIRED:业务方法需要在一个事务中运行,如果方法运行时,已处在一个事务中,那么就加入该事务,否则自己创建一个新的事务。这是spring默认的传播行为。

    2. NOT_SUPPORTED:声明方法不需要事务。如果方法没有关联到一个事务,容器不会为他开启事务,如果方法在一个事务中被调用,该事务会被挂起,调用结束后,原先的事务会恢复执行。

    3. REQUIRESNEW:不管是否存在事务,该方法总会为自己发起一个新的事务。如果方法已经运行在一个事务中,则原有事务挂起,新的事务被创建。

    4. MANDATORY:该方法只能在一个已经存在的事务中执行,业务方法不能发起自己的事务。如果在没有事务的环境下被调用,容器抛出例外。

    5. SUPPORTS:该方法在某个事务范围内被调用,则方法成为该事务的一部分。如果方法在该事务范围外被调用,该方法就在没有事务的环境下执行。

    6. NEVER:该方法绝对不能在事务范围内执行。如果在就抛异常。只有该方法没有关联到任何事务,才正常执行。

    7. NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务,则按REQUIRED属性执行。它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点。内部事务的回滚不会对外部事务造成影响。它只对DataSourceTransactionManager事务管理器起效。

    展开全文
  • spring声明式事务的传播行为,严格来说是spring特有的,数据库本身并没有这个概念。本文会列举出spring事务的七种传播行为,并以代码案例的方式展示不同的传播行为的表现是怎样的。 1.1 什么是事务传播行为 事务传播...
  • @Transactional注解支持9个属性的设置...其中propagation属性用来枚举事务传播行为,isolation用来设置事务隔离级别,readOnly进行读写事务控制。 @Service @Transactional(readOnly = true) public class AppTr...
  • REQUIRED:使用调用者的事务 REQUIRES_NEW:将当前调用者的事务挂起,执行新的事务 在数据库定义三张表 用户表id和余额,库存表书籍编号和库存, 书籍编号,名称和价格 在service定义的购买书的方法 @Service ...
  • Spring事务与事务传播行为 一、事务介绍 面试问: 什么是事务? 答:事务就是保证数据的一致性。 Spring事务 Spring事务传播行为 事务的隔离级别有也就是事务的特性? 1、原子:要么全部成功,要么全部失败。不...
  • xmlns:tx="http://www.springframework.org/schema/tx" http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
  • (1)在【Spring JDBC与事务管理6:Spring声明式事务一:声明式事务配置;】中,我们知道propagation属性设置为“REQURIED”就是开启声明式事务;但是,对于propagation属性的详细内容并不了解;所以,本篇博客就来...
  • 声明式事务的事务属性:一:传播行为二:隔离级别三:只读提示四:事务超时间隔传播行为:所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行...
  • //添加事务注解 @Transactional @Override public void purchase(String username, String isbn) { //1.获取书的单价 int price=bookShopDao.findBookPriceByIsbn(isbn); //2.更新书的库存 bookShopDao....
  • 一、事务传播行为 1.介绍 当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行。 2.属性 事务传播行为可以由...
  • 5、声明式事务 事务概述 ●在JavaEE企业级开发的应用领域,为了保证数据的完整性和一致性,必须引入数据库事务的概念,所以事务管理是企业级应用程序开发中必不可少的技术。 ●事务就是一组由于逻辑上紧密关联而...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,197
精华内容 6,478
关键字:

声明式事务传播行为