zoukankan      html  css  js  c++  java
  • 04Spring事务控制

    事务控制实现方式有:

    • 编程式事务控制:自己手动创建对象,编写事务控制代码
    • 基于XML的声明式事务控制:通过配置文件完成
    • 基于注解的声明式事务控制:通过注解完成

    编程式

    spring提供的事务管理器接口PlatformTransactionManager,不同的DAO层技术有不同的实现类(如 jdbc/mybatis/hibernate),该接口的方法有:

    • 获取事务的状态信息(getTransactionStatus(TransactionDefinition)
    • 提交事务(commit(status)
    • 回滚事务(rollback(status)

    编程式事务控制的三大对象:

    1. PlatformTransactionManager平台事务管理接口:不同平台实现了不一样的类
    2. TransactionDefinition事务定义
      • 方法包括:设置事务级别、设置事务传播行为
    3. TransactionStatus事务运行状态
      • 方法包括:是否存储回滚点、事务是否完成、是否是新事物、事务是否回滚

    事务控制理解:Spring框架事务控制管理是基于AOP实现的

    • 业务可以看做切点(被增强方法),事务可以看做通知(增强方法)
    • 配置切面:xml或者注解

    基于XML

    1. 导入坐标spring-context aspectjweaver spring-jdbc spring-tx spring-test druid
    2. 创建数据表account(name, money)
    3. 创建domain模板
    4. 创建dao层,实现和数据库的简单交互 (in 转出钱, out 转入钱)
    5. 创建service层,实现业务逻辑 (transfer一个账转到另一个账号,该方法算是一个事务)
    6. 创建测试方法,调用service方法
    7. 配置xml,重要内容如下:
      • 定义一个事务管理(配置事务管理器)
      • 配置通知(配置事务),里面指定切点(service业务逻辑)
      • 织入:将切点和通知结合
    <!--平台事务管理器,从dataSource中获取一个conn-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    
    <!--通知:增强方法,也就是事务-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <!--事务定义-->
        <tx:attributes>
            <!--切点1:transfer方法-->
            <tx:method name="transfer"/>
            <!--切点2:查询方法-->
            <tx:method name="findAll"/>
            <!--切点3:更新方法,可以使用通配符-->
            <tx:method name="update*"/>
        </tx:attributes>
    </tx:advice>
    
    <!--事务织入-->
    <aop:config>
        <!--事务织入就用advisor,其他织入可以用aspect-->
        <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.service.impl.*.*(..))"/>
    </aop:config>
    

    在配置切点时,有几个参数可以配置

    <tx:method name="xx">
    1. name: 切点方法名称
    2. isolation: 事务隔离级别
    3. propogation: 事务传播行为
    4. timeout: 超时时间
    5. read-only: 是否只读
    

    基于注解

    配置文件如下:

    • 组件扫描
    • 事务管理器
    • 事务的注解驱动
    <!--组件扫描-->
    <context:component-scan base-package="com"/>
    <!--平台事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--事务的注解驱动:让事务注解起作用-->
    <tx:annotation-driven transaction-manager="transactionManager"/>
    

    注解:

    • 各个层的类上添加组件注解(@Componet, @Autowired等)
    • 在需要添加事务的方法上添加事务注解@Transactional

    事务注解注意:

    • @Transactional关于事务的参数和xml一样
    • 可以用在类上,那么该类下所有方法使用同一套注解配置
  • 相关阅读:
    adb root : adbd cannot run as root in production builds
    通过adb shell操作android真机的SQLite数据库
    基金--智能定投
    使用注册表优化终端、编辑器的中英字体混合显示,如「Consolas + 雅黑」「Monaco + 雅黑」
    诗词中的雨
    最好的PHP博客系统
    [重要更新][Quartus II][14.1正式版]
    解决Xilinx ISE在Win8下打开崩溃闪退的方法
    THE CUSTOMISER
    RAD Studio 2010~XE8 官方 ISO 下载地址 (2015-03-28更新)
  • 原文地址:https://www.cnblogs.com/mingriyingying/p/13639516.html
Copyright © 2011-2022 走看看