zoukankan      html  css  js  c++  java
  • Spring中的事务管理(学习笔记)

    什么是事物?

      事物是指逻辑上的一组操作,这组操作要么全部成功,要么全部失败。

    事物的特性:

      原子性、一致性、隔离性、持久性

    Spring事务管理的高级接口:

      PlatformTransactionManage:(根基不同的持久层框架使用不同的具体实现)

      TransactionDefinition:(隔离级别(ISOLATION)、传播行为(PROPAGATION)、超时时间(TIMEOUT)、只读)

      TransactionStatus:  (记录事物的状态)

    Sring实现事务管理的方式:

      编程式事务管理:实际应用中很少使用,通过TransactionTemplate手动实现

     1.<!-- 配置事务管理器 -->
      <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <!-- 注入数据库连接池 -->
        <property name="dataSource" ref="dataSource"/>
      </bean>

     2.<!-- 编程式事务管理 -->
      <!-- 配置事物管理的模板:spring为简化事物管理的代码而提供的类 -->
      <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
        <property name="transactionManager" ref="transactionManager"></property>
      </bean>

      3.//在需要事物管理的类中调用transactionTemplate.execute方法

        public void transferByTransactionTemplate(String out, String in, Double money) {
          transactionTemplate.execute(new TransactionCallbackWithoutResult() {

            @Override
            protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
              accountDao.inMoney(in, money);
              accountDao.outMoney(out, money);
            }
          });
        }

        使用XML声明式事务管理:开发中推荐使用(代码侵入性小),通过Spring的AOP实现

          a.ProxyFactoryBean + XML :早期spring2.0的方式

              <!-- 通过ProxyFactoryBean + XML方式实现事物管理 -->

            <!-- 配置业务层的代理 -->
                        <bean id="accountServiceProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
              <!-- 配置目标对象 -->
              <property name="target" ref="accountService" />
              <!-- 注入事物管理类 -->
              <property name="transactionManager" ref="transactionManager" />
              <!-- 注入事物的相关属性 -->
              <property name="transactionAttributes">
                <props>
                  <!--
                    prop的格式:
                      *PROPAGATION :事物的传播行为
                      *ISOLATION :事物的隔离级别
                      *readOnly :只读
                      *-Exception :需要回滚的异常
                      *+Exception :不需回滚的异常
                  -->
                  <prop key="transferByAOP">PROPAGATION_REQUIRED</prop>
                </props>
              </property>
            </bean>

          b.tx:advice + aop方式: 一次配置永久生效

           <!-- 通过AOP方式实现声明式事务管理 -->

          <!-- 配置事物的通知:(事物增强) -->
          <tx:advice id="txAdcive" transaction-manager="transactionManager">
            <tx:attributes>

              <!--
                <tx:method 相关属性
                  *propagation :事物传播行为
                  *isolation :事务隔离级别
                  *read-only :只读
                  *rollback-for :需要回滚的异常
                  *no-rollback-for :不需回滚的异常
                  *timeout :超时时间
              -->

              <tx:method name="transferByAOP" propagation="REQUIRED"/>
            </tx:attributes>
          </tx:advice>
          <!-- 配置切面 -->
          <aop:config>
            <!-- 配置切入点 -->
            <aop:pointcut id="pointcut" expression="execution(* com.cgj.spring.transaction.service.impl.AccountServiceImpl.transferByAOP(..))"/>
            <!-- 配置切面 -->
            <aop:advisor advice-ref="txAdcive" pointcut-ref="pointcut"/>
          </aop:config>

          c.@Transactional注解的方式:(推荐)注解控制

          a.<!-- 配置基于注解的声明式事物 -->

          <!-- 默认使用注解来管理事物行为 -->

          <tx:annotation-driven transaction-manager="transactionManager"/>

         b.在需要事物管理的类或者方法上加(相关属性在注解的属性中配置,不配置使用默认值)    @Transactional  

                      声明式事务管理 事物的传播行为:

                            未完待续

  • 相关阅读:
    Java的native关键字---JAVA下调用其他语言的关键词
    JAVA关键词synchronized的作用
    Ubuntu下安装android studio的时候,无法进入图形界面--/usr/lib/jdk1.8.0_60/jre/lib/i386/libawt_xawt.so: libXtst.so.6: 无法打开共享对象文件: 没有那个文件或目录
    安装XP和Ubuntu双系统问题——Ubuntu安装时无法识别原有系统
    耗时又繁重的SQL诊断优化,以后就都交给数据库自治服务DAS吧!
    阿里云发布政企安全加速解决方案 加码助力政企信息化安全
    Nacos 权限控制介绍及实战
    资深技术专家崮德在阿里管理研发团队的实践和思考
    容灾切换必备——全局流量管理介绍
    MaxCompute管家详解--管家助力,轻松玩转MaxCompute
  • 原文地址:https://www.cnblogs.com/LionheartCGJ/p/6642802.html
Copyright © 2011-2022 走看看