每一年都奔走在自己热爱里

没有人是一座孤岛,总有谁爱着你

Spring学习笔记(七)-基于Spring注解的事务管理

Spring学习笔记(七)-基于Spring注解的事务管理

  • @Transactional注解:使用该注解的属性控制事务(隔离级别、传播行为、超时)

  • Spring中事务的控制实现基本原理是环绕通知

  • 属性:

    • Propagation propagation() default Propagation.REQUIRED;传播行为控制

    • Isolation isolation() default Isolation.DEFAULT;隔离级别控制

    • int timeout() default -1; 控制事务超时

    • boolean readOnly() default false;设置方法对数据库的操作是否为只读

    • Class<? extends Throwable>[] rollbackFor() default {};回滚的异常类列表,表示方法抛出指定的异常是抛出异常的列表,框架首先检查方法抛出的异常是否在该数组中,如果在则一定回滚,如果不在则检查是否是RuntimeException,如果是则一定回滚

    • String[] rollbackForClassName() default {};回滚的异常类列表,值为String类型

    • Class<? extends Throwable>[] noRollbackFor() default {};不需要回滚的异常类列表

  • 使用位置:公共业务方法或类(类中所有公共方法增加事务)

  • Spring配置文件的设置

    • <!--声明事务管理器-->
      <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
                  <property name="dataSource" ref="dataSource"/>
      
    ```
  • 事务控制的模式:

    • 编程式,在业务代码中编程控制事务
    • 声明式,不需要在业务代码中编码,使用AOP增强
  • 基于Spring注解的事务管理

  • Spring配置文件设置

    •   <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <!--需要指定数据源-->
            <property name="dataSource" ref="dataSource"/>
        </bean>
      
    • 开启事务注解驱动

    •   <tx:annotation-driven transaction-manager="transactionManager"/>
      
  • 指定目标方法开启事务控制

    • @Transactional(propagation = Propagation.REQUIRED,readOnly = false)
      public void transfer(String sourceName, String targetName, Float money) {
         //doSomeThing... ...
      }
      
posted @ 2020-12-11 19:34  雨下整夜~  阅读(101)  评论(0)    收藏  举报