Spring关于AOP的学习5(声明式事务及传播特性、事务在xml上的配置)

事务:事务是数据库操作的最小单元,也就是事务中执行的操作要么一起成功,要么一起回滚,因为他是最小的操作单元。
事务的特性:原子性、一致性、隔离性、持续性。
事务的隔离级别:(1)Serializable(序列化) (2)Repeatable read(可重复读) (3)3.Read Committed(已提交读) (4)Read Uncommitted(未提交读),具体可参考https://www.huaweicloud.com/zhishi/edu-arc-sjkzs37.html
1、在spring中声明式事务的配置:
(1)在xml上配置事务管理器及开启事务

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

(2)如何使用?
@Transactional注解可以开启事务。
注解中的参数:

 /**
     * @Transactional(参数)
     *      propagation:传播特性
     *      isolation:隔离级别:四种隔离级别,会引发不同的数据错乱问题
     *      timeout:超时时间,限制事务提交的时间,超时则回滚
     *      readonly:只读事务,如果配置了只读事务,那么在事务运行期间,不允许对数据进行修改,否则抛出异常
     *
     *      不回滚,可用来设置指定异常时不回滚
     *          noRollBackfor:异常类名称
     *          noRollbackForClassName = 异常类包及名称,String类型
     *      回滚,设置指定异常回滚
     *          rollBackfor:异常类名称
     *          rollbackForClassName = 异常类包及名称,String类型
     */

2、事务的传播特性:指一个事务方法被另一个事务方法调用时
(1)REQURED:默认是REQURED,以外层事务为准,里层事务不生效,外层事务决定是否回滚(可用两个方法测试)
(2)REQURES_NEW:若里层有事务,先将外层事务挂起,先执行里层事务(可用两个方法测试)
(3)SUPPORTS:若外部有事务,里层也有事务,则由外层事务决定是否回滚,也就是这个属性设置后里层事务就不存在事务了,若外层无事务,里层也不会回滚
(4)NOT_SUPPORTED:若外层有事务,里层也有事务,外层或里层事务有异常,都不会回滚
(5)NEVER:若外层有事务,里层也有事务,外层或里层事务有异常,则抛出异常
(6)MANDATORY:(mandatory)当前方法必须运行在事务内部,如果没有运行的事务,则抛出异常
(7)NESTED(nested):里层与外层都有事务,里层跟NEQUEST_NEW一样,也会生成一个新事务,但里层事务与外层事务相关,若外层事务抛出异常需要回滚,则里层事务也需要回滚。
***自己方法调用不存在事务

3、事务如何在xml上配置

<!--事务的配置-->
    <!--声明一个事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <aop:config>
        <aop:pointcut id="txPointcut" expression="execution(* com.csh.service.*.*(..))"/>
        <!--事务-->
        <aop:advisor advice-ref="myAdvice" pointcut-ref="txPointcut"></aop:advisor>
    </aop:config>

    <!--配置在哪些方法上添加事务,*代表全部方法-->
    <tx:advice transaction-manager="transactionManager" id="myAdvice">
        <tx:attributes>
            <tx:method name="insert" propagation="REQUIRED"/>
            <tx:method name="*" propagation="REQUIRED"></tx:method>
        </tx:attributes>
    </tx:advice>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值