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>
  • 相关阅读:
    CentOS7 使用定时任务
    springboot整合mybatis+mysql+druid数据源
    js 防抖和节流,封装成函数
    vue 单页面项目卸载依赖和插件的方式
    Tomcat部署vue单页面项目
    linux DRM/KMS 测试工具 modetest、kmscude、igt-gpu-tools (二)
    linux DRM/KMS 测试工具 modetest、kmscude、igt-gpu-tools (一)
    软构设计模式简单归纳
    软件构造复习中关于不变性的一个疑问以及代码验证
    代码快照图与可变不可变
  • 原文地址:https://www.cnblogs.com/cqyp/p/12517140.html
Copyright © 2011-2022 走看看