zoukankan      html  css  js  c++  java
  • Spring 基于xml的事务控制

    1.事务控制的理解

    事务控制的慨念这里不作说明。事务控制的不好可能会造成数据库数据的脏读,污读

    举个例子:转账的功能

    张三给李四转钱,各自的账号金额操作完成后,需要各自更新到数据库,此时如果张三更新完后,程序异常了结束了,使得李四的账户没有更新,使得总金额不对

    为了控制这种数据的不合理,引进了事务。

    //张三的账户减钱
    bean1.setAge(bean1.getAge()-i);
    //李四的账户加钱
    bean2.setAge(bean2.getAge()+i);
    //更新张三账户
    updata(bean1);
    //异常
    int n=1/0;
    //更新李四的账户
    updata(bean2);

    2.Spring对事务控制的支持

    我们也可以使用自己定义的操作事务方法(建立事务,事务开启,事务回滚,事务完成,事务提交)然后结合spring AOP 来实现事务控制

    当然强大的spring已经为我们封装好了这些方法 我们只需要在xml中配置就可以使用了

       封装在此  PlatformTransactionManager  接口中,我们可以使用其实现类 DataSourceTransactionManager,JtaTransactionManager和 HibernateTransactionManager等。

    3.使用Spring的事务控制

    1.需要的包:

    +数据库的驱动+当然也需要spring  ioc,aop的包 

    2.配置文件的约束:

    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd">

     3. spring中基于XML的声明式事务控制配置步骤

    1、使用ico配置事务管理器   

      使用实现类DataSourceTransactionManager   需要配置数据源 所以还要使用ioc 配置一个dataSource

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
    </bean>


    2、配置事务的通知
    此时我们需要导入事务的约束 tx名称空间和约束,同时也需要aop的
    使用tx:advice标签配置事务通知
    属性:

    id:给事务通知起一个唯一标识

    transaction-manager:给事务通知提供一个事务管理器引用

    <tx:advice id="txAdvice" transaction-manager="transactionManager">  

    </tx:advice>


    3、配置AOP中的通用切入点表达式

    4、建立事务通知和切入点表达式的对应关系

    <aop:config>
    <!-- 配置切入点表达式-->
    <aop:pointcut id="pt1" expression="execution(* com.itheima.service.impl.*.*(..))"></aop:pointcut>
    <!--建立切入点表达式和事务通知的对应关系 -->
    <aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"></aop:advisor>
    </aop:config>


    5、配置事务的属性
    是在事务的通知tx:advice标签的内部

    <tx:advice id="txAdvice" transaction-manager="transactionManager">
    <!-- 配置事务的属性
    isolation:用于指定事务的隔离级别。默认值是DEFAULT,表示使用数据库的默认隔离级别。
    propagation:用于指定事务的传播行为。默认值是REQUIRED,表示一定会有事务,增删改的选择。查询方法可以选择SUPPORTS。
    read-only:用于指定事务是否只读。只有查询方法才能设置为true。默认值是false,表示读写
    timeout:用于指定事务的超时时间,默认值是-1,表示永不超时。如果指定了数值,以秒为单位。
    rollback-for:用于指定一个异常,当产生该异常时,事务回滚,产生其他异常时,事务不回滚。没有默认值。表示任何异常都回滚。
    no-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>

     

  • 相关阅读:
    操作系统演进和未来趋势(附下载)
    用树莓派构建一台服务器,永久运行网站
    用 Docker 构建 MySQL 主从环境
    (一)多线程:线程概述
    网站可访问性的五个自动化测试工具
    个人对前端工程化的理解
    MongoDB安装过程中出现service MongoDB failed to start,verify that you have sufficient privileges to start
    前端开发IDE
    atom插件:js,nodejs,es6补全,高度定制化
    atom离线手动安装atom插件
  • 原文地址:https://www.cnblogs.com/miwujun/p/12764944.html
Copyright © 2011-2022 走看看