zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    持续集成(转)
    Java中前台JSP请求Servlet实例(http+Servlet)
    Java中Map集合的四种访问方式(转)
    Python中字符串操作
    Python中的range函数用法
    Python学习资料下载地址(转)
    Linux性能工具介绍
    性能问题定位方法
    录制脚本前需要理解的几个基本概念
    Python 硬件底层基础理论
  • 原文地址:https://www.cnblogs.com/cqyp/p/12517140.html
Copyright © 2011-2022 走看看