Spring管理事物两种方式

Spring管理事物两种方式

1. 编程式事物管理(在开发中不经常使用)

使用步骤

1. 配置数据库事物管理 DataSourceTransactionManager
   <!--配置事物管理器-->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
2. 配置数据库事物管理模板
  <!--配置事物管理模板-->
    <bean id="transactionTemplate"
          class="org.springframework.transaction.support.TransactionTemplate">
        <!--配置事物管理-->
        <property name="transactionManager" ref="transactionManager"></property>

    </bean>
3. 在Service层中注入数据库事物管理模板
     <!--配置Service-->
        <bean id="accountService" class="top.wintp.springtx.demo1.service.AccountServiceImpl">

            <!--配置事物的管理模板类-->
            <property name="transactionTemplate" ref="transactionTemplate"/>

            <property name="accountDao" ref="accountDao"/>
        </bean>
4. 在需要执行事物的位置调用transactionTemplate的execute()方法
      transactionTemplate.execute(new TransactionCallbackWithoutResult() {
                @Override
                protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {

                    //执行你的逻辑
                }
        });

2. 声明式事物管理

声明式事务管理方式一:基于TransactionProxyFactoryBean的方式 (不常用)

使用步骤
1.配置事物管理 DataResourceTransactionManager
     <bean id="transactionManager"
              class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"/>
        </bean>
2.配置事物代理类
    <!--配置事务代理类-->
          <bean id="accountServiceProxy"
                  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
                <!--配置事务管理器-->
                <property name="transactionManager" ref="transactionManager"/>

                <!--配置代理目标类-->
                <property name="target" ref="accountService"></property>

                <!--
                    配置事物的基本属性
                    必须配置
                -->

                <property name="transactionAttributes">
                    <props>

                        <!--
                        prop 格式
                            key:方法名  或者 方法 *  例如  insert*

                            值的格式:
                                PROPAGATION:事物的传播行为
                                ISOLATION:事物的隔离级别
                                readOnly:只读
                                -Exception:发生哪些异常,回滚事物 默认任何异常都回滚
                                +Exception:发生哪些异常,不回滚事物
                        -->

                        <prop key="transfMoney">PROPAGATION_REQUIRED</prop>

                    </props>

                </property>
            </bean>
3.引用代理类 使用代理目标类来接收
        @Resource(name = "accountServiceProxy")
        private AccountService mAccountService;

声明式事务管理方式二:基于AspectJ的XML方式

1.配置事物管理类
<!--配置事物的管理类-->
 <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
2.配置事物的增强
  <!--配置事物的增强-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="*" propagation="REQUIRED"/>
        </tx:attributes>

    </tx:advice>

###### 3.配置AOP – 切点和切面

   <!--配置AOP-->
     <aop:config>
         <!--配置切入点-->
         <aop:pointcut id="pointcut1"
                       expression="execution(* top.wintp.springtx.demo6.service.AccountService+.*(..))"/>

         <!--配置切面-->
         <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/>

     </aop:config>

声明式事务管理方式三:基于注解的方式

1.配置事物管理器
  <!--配置事物的管理类-->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
2.开启事物注解
  <!--开启事物注解
    -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
3.在需要事物管理的类上添加注解
  @Transactional(propagation = Propagation.REQUIRED)
posted @ 2018-03-03 14:38  趣学程序  阅读(234)  评论(0编辑  收藏  举报