zoukankan      html  css  js  c++  java
  • Spring的事务管理

    Spring事务管理API

      1、Spring事务管理的两种方式

    第一种:编程式事务管理(不用)

    第二种:声明式事物管理

     (1)基于 xml 配置文件实现

     (2)基于注解实现

     

    2、Spring事务管理的 API 介绍

      @2.1Spring事务管理主要包括3个接口(位于org.springframework.transaction包中):

      (1)PlatformTransactionManager ——事务管理器

      (2)TransactionDefinition——事务定义信息(隔离、传播、超时、只读)

      (3)TransactionStatus——事务具体运行状态

      @2.2Spring事务管理涉及的接口的联系如下:

      

     

      @2.3Spring为不同的持久化框架提供了不同的 PlatformTransactionManager 接口实现:

    PlatformTransactionManager实现类

    说明

    org.springframework.jdbc.datasource.

    DataSourceTransactionManager

     使用spring JDBC或mybatis进行持久化数据时使用
     

    org.springframework.orm.hibernate5.

    HibernateTransactionManager

     使用Hibernate5版本进行持久化数据
     org.springframework.orm.jpa.JpaTransactionManager

    Jpa时使用

     

    org.springframework.orm.jdo.JdoTransactionManager

     

    Jdo时使用

     

    org.springframework.transaction.jta.

    JtaTransactionManager

     

    使用JTA实现来管理事务,在一个事务跨越多个资源时必须使用

     

      @2.4两种声明式事务 ,我们都需要先配置——事物管理器

    搭建转账环境

    1、创建数据库表,添加数据

      

    2、创建 service 和 dao 类,完成注入关系

    (1)service层又叫业务逻辑层

    (2)dao层,单纯对数据库操作层,在 dao 层不添加业务(一般情况下)

    (3)需求:小王转账1000给小马

      小王少1000

      小马多1000

      dao层:

      

     

      Service层:

     

      

       3、产生问题

        小王少了1000之后,出现异常,小马不会多1000,钱就丢失了

      4、解决:

        添加事物解决,出现异常进行回滚操作

    声明式事务管理(使用AspectJ的xml配置)

    配置文件方式使用 AOP 思想配置

    第一步:配置事务管理器

    <!-- 第一步配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!-- 注入dataSource,指定对哪个数据库进行操作 -->
        <property name="dataSource" ref="dataSource"></property>
    </bean>

      

      第二步:配置事物增强

    <!-- 第二步:配置事务增强 -->
    <tx:advice id="txadvice" transaction-manager="transactionManager">
        <!-- 做事务的操作 -->
        <tx:attributes>
            <!-- 设置进行事务操作的方法匹配规则 -->
            <tx:method name="account*" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>

     

      第三步:配置切面

    <!-- 第三步:配置切面 -->
    <aop:config>
        <!-- 切入点 -->
        <aop:pointcut expression="execution(* com.bjxb.service.OrdersService.*(..))" id="pointcut1"/>
        <!-- 切面(把增强用在哪个切入点上) -->
        <aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/>
    </aop:config>

    声明式事务管理(注解)

      第一步:配置事物管理器

      

    <!-- 第一步:配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

      第二步:配置事物注解

    <!-- 第二步:开启事务的注解 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

      第三步:在要使用事物的方法所在类上面添加注解 @Transactional

    @Transactional
    public class OrdersService {
    }
  • 相关阅读:
    畅通工程(hdu1232)并查集
    qsort函数的用法
    二叉搜索树(hdu3791)
    Binary Tree Traversals(HDU1710)二叉树的简单应用
    Safe Or Unsafe(hdu2527)哈弗曼VS优先队列
    山东省第四届acm解题报告(部分)
    Points on Cycle (hdu1700,几何)
    A计划 hdu2102(bfs一般题)
    杀人游戏(hdu2211)插入法
    hdu1518 Square(dfs)
  • 原文地址:https://www.cnblogs.com/xb1223/p/10175632.html
Copyright © 2011-2022 走看看