Spring 事务操作介绍和示例

2022-01-04 0 By admin

一、Spring 框架中事务管理介绍

Spring 框架开发过程中事务一般配置在JavaEE 三层结构里面Service 层(业务逻辑层)。

1.1、事务管理的两种实现方式

有两种方式:编程式事务管理和声明式事务管理(推荐)

  1. 编程式事务管理:通过显示开启事务、提交事务、回滚事务和try-catch语句实现。
  2. 声明式事务管理:通过对类或者方法,声明开启事务管理,此类或方法就支持事务。

1.2、声明式事务管理

  1. 基于注解方式(推荐)
  2. 基于xml 配置文件方式

在Spring 进行声明式事务管理,底层使用AOP 原理。

1.3、Spring 事务管理API

提供一个接口,代表事务管理器,这个接口针对不同的框架提供不同的实现类。

Spring 事务管理API实现类
Spring 事务管理API实现类

二、注解声明式事务管理

2.1、在spring 配置文件配置事务管理器

<!--创建事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<!--注入数据源-->
	<property name="dataSource" ref="dataSource"></property>
</bean>

2.2、在spring 配置文件,开启事务注解

1、在spring 配置文件引入名称空间tx。

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
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/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">

2、开启事务注解

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

2.3、在service 类上面添加事务注解

  1. @Transactional,这个注解添加到类上面,也可以添加方法上面
  2. 如果把这个注解添加类上面,这个类里面所有的方法都添加事务
  3. 如果把这个注解添加方法上面,为这个方法添加事务
@Service
@Transactional
public class UserService {
......
}

三、XML 声明式事务管理

在spring 配置文件中进行配置

  1. 配置事务管理器
  2. 配置通知
  3. 配置切入点和切面

3.1、创建事务管理器

<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--注入数据源-->
<property name="dataSource" ref="dataSource"></property>
</bean>

3.2、配置通知

<tx:advice id="txadvice">
<!--配置事务参数-->
<tx:attributes>
<!--指定哪种规则的方法上面添加事务-->
<tx:method name="accountMoney" propagation="REQUIRED"/>
<!--<tx:method name="account*"/>-->
</tx:attributes>
</tx:advice>

3.3、配置切入点和切面

<aop:config>
<!--配置切入点-->
<aop:pointcut id="pt" expression="execution(*
com.atguigu.spring5.service.UserService.*(..))"/>
<!--配置切面-->
<aop:advisor advice-ref="txadvice" pointcut-ref="pt"/>
</aop:config>