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 {
}

 

posted @ 2018-12-25 18:15  花咖  阅读(491)  评论(0编辑  收藏  举报