Spring的事务操作(事务概念)

文章目录

前言

一、概念

1.什么是事务

2.事务的实现方式(面试题)

声明式事务管理

编程式事务管理

二、事务传播机制

七种传播机制及其特点(面试题)

总结


前言

        我们在学习Spring时会学到关于事务操作的概念,本文主要介绍关于事务的概念和相关操作,此外还附上事务的相关面试题。

一、概念

1.什么是事务

        事务就是用户定义的一系列数据库操作,这些操作可以视为一个完成的逻辑处理工作单元,要么全部执行,要么全部不执行,是不可分割的工作单元。

2.事务的实现方式(面试题)

(1)编程式事务管理对基于 POJO 的应用来说是唯一选择。我们需要在代码中调用beginTransaction()、commit()、rollback()等事务管理相关的方法,这就是编程式事务管理。

(2)基于 TransactionProxyFactoryBean的声明式事务管理

(3)基于 @Transactional 的声明式事务管理

(4)基于Aspectj AOP配置事务

主要就是分为两类,一类是声明式事务管理,一类是编程式事务管理。

声明式事务管理

基于AOP面向切面的,它将具体业务与事务处理部分解耦,代码侵入性很低。有两种实现方式:

  • 基于TXAOP的xml配置文件方式
  • 基于@Transactional注解

基于注解的事务管理代码演示

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

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

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= = "ht tp://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 d
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring- - tx.xsd">

(2)开启事务注解

<tx:annotation-driven transaction-manager= "txManager"></tx:annotation-driven>

 3 、在 service 类上面( 类上面(或者 或者 service  类里面方法上面)添加事务注解
(1)@Transactional,这个注解添加到类上面,也可以添加方法上面
(2)如果把这个注解添加类上面,这个类里面所有的方法都添加事务
(3)如果把这个注解添加方法上面,为这个方法添加事务

@Service
@Transactional
public class UserService {
}

编程式事务管理

在代码中手动的使用注释或XML配置管理事务的提交、回滚等操作,代码侵入性比较强。

XML 声明式事务管理代码演示

1 、在 spring  配置文件中进行配置
第一步 配置事务管理器
第二步 配置通知
第三步 配置切入点和切面

<!--1 创建事务管理器-->
< bean  id= "transactionManager"
class= "org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--注入数据源-->
< property  name= "dataSource"  ref= "dataSource"></ property>
</ bean>
<!--2 配置通知-->
< tx :advice  id= "txadvice">
<!--配置事务参数-->
< tx :attributes>
<!--指定哪种规则的方法上面添加事务-->
< tx :method  name= "accountMoney"  propagation= "REQUIRED"/>
<!--<tx:method name="account*"/>-->
</ tx :attributes>
</ tx :advice>
<!--3 配置切入点和切面-->
< aop :config>
<!--配置切入点-->
< aop :pointcut  id= "pt"  expression= "execution(*
com.guigu.spring5.service.UserService.*(..))"/>
<!--配置切面-->
< aop :advisor  advice- - ref= "txadvice"  pointcut- - ref= "pt"/>
</ aop :config>

二、事务传播机制

        Spring 事务传播机制的诞生是为了规定多个事务在传播过程中的行为的。比如方法 A 开启了事务,而在执行过程中又调用了开启事务的 B 方法,那么 B 方法的事务是应该加入到 A 事务当中呢?还是两个事务相互执行互不影响,又或者是将 B 事务嵌套到 A 事务中执行呢?所以这个时候就需要一个机制来规定和约束这两个事务的行为,这就是 Spring 事务传播机制所解决的问题。

Spring 事务传播机制可使用 @Transactional(propagation=Propagation.XXX) 来定义。

七种传播机制及其特点(面试题)

PROPAGATION_REQUIRED(required:需要、依赖、依靠):(默认传播行为)如果当前没有事务,就创建一个新事务;如果当前存在事务,就加入该事务。

PROPAGATION_REQUIRES_NEW(requires_new:需要新建:无论当前存不存在事务,都创建新事务进行执行。

PROPAGATION_SUPPORTS(supports:支持;拥护:如果当前存在事务,就加入该事务;如果当前不存在事务,就以非事务执行。

PROPAGATION_NOT_SUPPORTED(not_supported:不支持:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NESTED(nested:嵌套的:如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则按REQUIRED属性执行。

PROPAGATION_MANDATORY(mandatory:强制性的:如果当前存在事务,就加入该事务;如果当前不存在事务,就抛出异常。

PROPAGATION_NEVER(never:从不:以非事务方式执行,如果当前存在事务,则抛出异常。


总结

        在这里我只对Spring的事务进行一个简单的基础概念介绍,如果需要进一步了解,需要自己结合案例去实现事务才能更好理解,尤其是事物的传播机制,相关代码可以去看这一篇文章。

@Transactional 详解_微风--轻许--的博客-CSDN博客

  • 28
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值