Spring中声明式事务控制

一、Spring中声明式事务控制

           声明式事务的配置xml和注解混合搭配使用的环境搭建源码:https://github.com/Cqypyglz/springTx

二、基于XML的声明式事务的配置

 

       1.下面为具体代码的解释

         

 <!--配置业务层-->
    <bean id="accountService" class="com.li.service.impl.AccountServiceImpl">
        <property name="accountDao" ref="accountDao"></property>
    </bean>
    <!--配置账户的持久层-->
    <bean id="accountDao" class="com.li.dao.impl.AccountDaoImpl">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
 <!--配置jdbcTemplate-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql:///spring"></property>
        <property name="username" value="root"></property>
        <property name="password" value="123"></property>
    </bean>
    <!--spring中基于xml的声明式事务控制配置步骤
     1.配置事务管理器
     2.配置事务通知
         需要导入事务的约束,tx名称空间和约束,同时也需要aop
         使用tx:advice标签配置事务通知
               属性: id:事务的唯一标志
                     transaction-manager:给事务通知提供事务管理器引用
      3.配置aop中的通用切入点表达式
      4.建立事务通知和切入点表达式的对应关系
      5.配置事务的属性
           是在tx:advice标签内部
    -->
    <!--配置事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
     <!--配置事务的通知-->
     <tx:advice id="txAdvice" transaction-manager="transactionManager">
         <!--配置事务的属性
          isolation:用于指定事务的隔离级别,默认DEFAULT,表示使用数据库的默认隔离级别
          propagation:用于指定事务的传播行为,默认值REQUIRED,表示一定会有事务,增删改的选择,查询方法也可选择SUPPORTS
          read-only:用于指定事务只读,只有查询方法才能设置为true,默认值为false,表示读写
          timeout:用于指定事务的超时时间,默认值-1,永不超时,如果指定了数值,以秒为单位
           no-rollback-for:用于指定一个异常,当产生该异常时,事务不回滚,产生其他异常时,事务回滚,没有默认值,表示任何异常都回滚
           rollback-for:用于指定一个异常,当产生该异常时,事务回滚,产生其他异常时,事务不回滚,没有默认值,表示任何异常都回滚
         -->
         <tx:attributes>
             <tx:method name="*" propagation="REQUIRED" read-only="false"/>
             <tx:method name="find*" propagation="SUPPORTS" read-only="true"></tx:method>
         </tx:attributes>
     </tx:advice>
 <!--配置aop-->
<aop:config>
    <!--配置切入点表达式-->
    <aop:pointcut id="pt1" expression="execution(* com.li.service.impl.*.*(..))"/>
    <!--建立事务通知和切入点表达式的对应关系-->
    <aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"></aop:advisor>
</aop:config>

   

二、基于注解的声明式事务的配置

       

<!--spring中基于注解的声明式事务控制配置步骤
     1.配置事务管理器
     2.开启spring对注解事务的支持
     3.在需要事务支持的的地方法使用@Transactional
    -->
    <!--配置事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
     <!--开启spring对注解事务的支持-->
    <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
原文地址:https://www.cnblogs.com/cqyp/p/12517140.html