首页 > 编程语言 >Java 事务管理@Transactional注解rollbackFor回滚属性,事务的传播行为propagation(REQUIRED ,REQUIRES_NEW新事务)

Java 事务管理@Transactional注解rollbackFor回滚属性,事务的传播行为propagation(REQUIRED ,REQUIRES_NEW新事务)

时间:2023-06-30 12:12:03浏览次数:54  
标签:事务管理 事务 Transactional 回滚 方法 id

事务管理
Java 事务管理@Transactional注解rollbackFor属性所有的异常都回滚;
事务的传播行为propagation(REQUIRED ,REQUIRES_NEW)

01.事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体,一起向数
据库提交或者是撤销操作请求。所以这组操作要么同时成功,要么同时失败。

02.事务的操作主要有三步:

  1. 开启事务(一组操作开始前,开启事务):start transaction / begin ;
  2. 提交事务(这组操作全部成功后,提交事务):commit ;
  3. 回滚事务(中间任何一个操作出现异常,回滚事务):rollback ;

03.Spring事务管理
在spring框架当中就已经把事务控制的代码都已经封装好了,并不需要我们手动实现。我们使用了
spring框架,我们只需要通过一个简单的注解@Transactional就搞定了.

04.@Transactional作用:就是在当前这个方法执行开始之前来开启事务,方法执行完毕之后提交
事务。如果在这个方法执行的过程当中出现了异常,就会进行事务的回滚操作

05.@Transactional注解书写位置:
方法
当前方法交给spring进行事务管理

当前类中所有的方法都交由spring进行事务管理
接口
接口下所有的实现类当中所有的方法都交给spring 进行事务管理

@Transactional //serviceImpl
public void delete(Integer id){
//根据部门id删除部门信息
deptMapper.deleteById(id);
//模拟:异常发生
int i = 1/0;
//删除部门下的所有员工信息
empMapper.deleteByDeptId(id);
}

06.可以在application.yml配置文件中开启事务管理日志,这样就可以在控制看到和事务相关的
日志信息了
#spring事务管理日志
logging:
level:
org.springframework.jdbc.support.JdbcTransactionManager: debug

07.注意事项;
默认情况下,只有出现RuntimeException(运行时异常)才会回滚
事务。主动抛出的异常不会回滚,若想要所有异常回滚需在注解中配置属性:
假如我们想让所有的异常都回滚,需要来配置@Transactional注解当中的rollbackFor属性,通过
rollbackFor这个属性可以指定出现何种异常类型回滚事务。

@Transactional(rollbackFor=Exception.class)
public void delete(Integer id){
//根据部门id删除部门信息
deptMapper.deleteById(id);
//模拟:异常发生
int num = id/0;
//删除部门下的所有员工信息
empMapper.deleteByDeptId(id);
}

08.什么是事务的传播行为呢?
就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制
所谓事务的传播行为,指的就是在A方法运行的时候,首先会开启一个事务,在A方法当中又调用了B方
法, B方法自身也具有事务,那么B方法在运行的时候,到底是加入到A方法的事务当中来,还是B方法
在运行的时候新建一个事务?这个就涉及到了事务的传播行为.

在@Transactional注解指定一个属性propagation,通过
propagation 属性来指定传播行为:
属性值 含义
REQUIRED 【默认值】需要事务,有则加入,无则创建新事务
REQUIRES_NEW 需要新事务,无论有无,总是创建新事务:外部事务和内部事务是独立的2个事务,不影响彼此
SUPPORTS 支持事务,有则加入,无则在无事务状态中运行
NOT_SUPPORTED 不支持事务,在无事务状态下运行,如果当前存在已有事务,则挂起当前事务
MANDATORY 必须有事务,否则抛异常
NEVER 必须没事务,否则抛异常

不论是否有异常,最终都要执行的代码:记录日志}finally {deptLogService.insert(deptLog);}

09.pring框架的第3大核心:Servlet,Filter,AOP

标签:事务管理,事务,Transactional,回滚,方法,id
From: https://www.cnblogs.com/chenshaojun2008/p/17516305.html

相关文章

  • 4第四章 分布式事务与自媒体素材管理
    #第四章分布式事务与自媒体素材管理目标能够理解什么是分布式事务能够理解CAP定理和BASE理论能够掌握seata要解决的问题能够完成seata集成到项目中使用能够掌握分布式文件系统fastdfs的基本使用能够完成素材管理功能能够完成自媒体文章列表查询功能1......
  • AOP事务处理
    前言AOP是Spring的一大特性,面向切面编程给开发者提供了一种全新的开发思路,不侵入业务逻辑,不修改业务逻辑的代码,实现一些程序必要的辅助功能,比如说:输出日志、权限校验、事务处理等等,优雅的AOP让程序的方法不再紧紧地耦合在一起,达到了解耦的目的,想用就用,不想用就不用AOP介绍AOP也......
  • 第二天(redis基础,配置,事务,持久化(RDB,AOF),发表和订阅,主从复制,哨兵模式)
    LISTlremkeynvaluerpoplpushab把a的右边的元素加到b的左边Set集合从第一个集合移动到第二个集合Hash哈希Zset有序集合GEO地理位置(类似Hash)HyperloglogBitMapredis配置(pdf里)redis事务实践R......
  • PostgreSQL技术大讲堂 - 第20讲:事务概述与隔离级别
     PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUGPG技术大讲堂。第20讲:事务概述与隔离级别内容1:ACID四大特性内容2:PostgreSQL......
  • 基于Xml的申明式事务开头出现ERROR org.springframework.test.context.TestContextMan
    刚开始一直查找关于第一行的错误,发现一直没有找到相关的解决方案。在看完log之后,在log中间位置发现另一个错误:FailedtointrospectClass[org.springframework.aop.aspectj.AspectJExpressionPointcut]fromClassLoader[jdk.internal.loader.ClassLoaders$AppClassLoader@639......
  • git 根据版本回滚
    步骤一: 步骤二: 步骤三: ......
  • redis事务
    1.概念redis的事务本质是一组命令的集合,事务支持一次执行多个命令,一个事务中所有的命令都会被序列化。在事务执行的过程中,会按照顺序串行执行队列中的命令,其他客户端提交的命令请求不会插入到当前的事务中redis的事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令r......
  • git 入门、reset的3种模式、回滚文件、还原文件、变基、merge
    git基础知识盗用网上的一张图,git有工作目录、索引区(也叫暂存区)、历史区,这3个区,一定要记在脑子里,基本上git所有的操作都是操作这3个区。新建一个文件并提交的一般操作是,新建文件gitadd到索引区gitcommit到历史区(添加-a参数会自动提交到索引区,相当于第2步+第3步)gitreset有3种......
  • sql server 事务处理模板
    sqlserver事务处理模板setxact_abortonbegintrybegintran--这里写你自己的sqlcommittranendtrybegincatchif(xact_state())=-1beginrollbacktranendif(......
  • 08 | 事务到底是隔离的还是不隔离的?
    08|事务到底是隔离的还是不隔离的?事务启动时机事务启动时机:begin/starttransaction命令并不是一个事务的起点,在执行到它们之后的第一个操作InnoDB表的语句,事务才真正启动。如果想要马上启动,可以使用starttransactionwithconsistentsnapshot这个命令。两者不同:......