springboot事物oracle,SpringBoot 事务管理

springboot事物oracle,SpringBoot 事务管理事务管理是项目中必不可少的一部分,使用SpringBoot时,可以很方便的配置和使用事务管理器。1.导入依赖当导入jdbc或者jpa依赖后,SpringBoot会自动分别注入DataSourceTransactionManager或JpaTransactionManager。所以我们不需要任何配置就可以使用@Transactional注解来进行事务的使用。我习惯使用jdbc,虽然Jpa有各种…

大家好,又见面了,我是你们的朋友全栈君。

事务管理是项目中必不可少的一部分,使用SpringBoot时,可以很方便的配置和使用事务管理器。

1. 导入依赖

当导入jdbc或者jpa依赖后,SpringBoot会自动分别注入DataSourceTransactionManager 或 JpaTransactionManager。所以我们不需要任何配置就可以使用@Transactional注解来进行事务的使用。我习惯使用jdbc,虽然Jpa有各种各样的优点(真的不太会用)。

org.springframework.boot

spring-boot-starter-jdbc

org.springframework.boot

spring-boot-starter-data-jpa

注:有些文章中说SpringBoot 开启事务需要在启动类加上 @EnableTransactionManagement,这是不需要的。

原因请看 org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration 类的源代码,里面已经配置好了。1)@Transactional注解默认只会对运行期异常( java.lang.RuntimeException及其子类)和Error进行回滚;

2)@Transactional注解只能被应用到public修饰的方法上,注解使用在非public修饰方法编译和运行期都不会报错,但也没有事务功能;

3)数据库引擎要支持事务,如MySQL中,innoDB,bdb支持事务,而myisam 不支持;常见RuntimeException子类:NullPointerExecption、ClassCastExecption、IndexOutOfBoundsException

常见 Error:OutOfMemoryError、ThreadDeath、VirtualMachineError

2. 事务回滚

在讲事务隔离级别和事务传播性之前,先讲一下SpringBoot中,我们平常是怎样控制事务回滚的。

一般情况下,我们会对Service层的方法开启事务,也就是说Controller -> Service 调用顺序中,如Service执行成功,Controller中出现异常,事务是无法回滚的。因为在@Transactional注解的方法结束后,事务就被提交了。1)@Transactional(rollbackFor = Exception.class) :任何异常都进行回滚;

2)TransactionAspectSupport.currentTransactionStatus().setRollbackOnly():捕获特定异常或自行判断后手动回滚

3. 事务隔离级别

事务隔离级别是指并发情况下事务之间的隔离程度,如不考虑隔离级别情况下,并发时可能会引起 脏读、不可重复读、幻读的情况。脏读:一个事务读取到了另一个事务未提交的数据。

例:事务1中需要多次读取数据A,第一次读取完成后,事务2对数据A有操作,事务1再次读取数据A,会读取到事务2操作的结果,但事务2因异常进行了回滚。这时候事务1对数据A就产生了脏读。

不可重复读:与脏读逻辑类似,一个事务读取到另一个事务已提交的 update数据,导致两次读取数据 值不一致。

幻读:与不可重复度逻辑类似,一个事务读取到另一个事务已提交的 insert数据,导致两次读取数据 条数 不一致。

为解决上述情况,我们可以进行事务隔离级别的设置。代码中我们只需使用Isolation枚举类提供的五个枚举值即可。枚举值取自接口TransactionDefinition 定义,该接口中定义了五个表示隔离级别的常量。DEFAULT:PlatfromTransactionManager默认的隔离级别,使用数据库默认隔离级别;Mysql 默认:可重复读,Oracle 默认:读已提交;

READ_UNCOMMITTED(未提交读):一个事务可以读取另一个事务修改但未提交的数据;不可避免脏读、不可重复读、幻读;

READ_COMMITTED(已提交读):一个事务可以读取另一个事务已经提交的数据;可避免脏读,不可避免不可重复读、幻读;

REPEATABLE_READ(可重复度):一个事务在整个过程中,可以多次执行某个查询,并且每次返回记录内容都相同;可避免脏读、不可重复读,不可避免幻读(MySQL中可避免幻读是有前提的)。

SERIALIZABLE(串行化的):可避免脏读、不可重复度、幻读。(严重影响性能,完全锁定相关数据库表)

4. 事务传播行为

事务传播行为指的是,由某个事务传播行为(propagation)修饰的方法被嵌套进另一个方法中时,事务是如何传播的。

传播行为中定义了传播范围、触发节点、是否沿用当前事务、是否挂起现有事务、或者在被调用时无事务则失败等等。

事务传播行为常量被封装在枚举类Propagation,枚举值取自接口TransactionDefinition,在接口中定义了如下七个表示传播行为的常量。REQUIRED:当前存在事务,就加入;否则,就新建一个事务;默认值

SUPPORTS:当前存在事务,就加入;否则,以非事务的方式继续运行;

MANDATORY:当前存在事务,就加入;否则,抛出异常;(IllegalTransactionStateException)

REQUIRES_NEW:新建事务,当前存在事务,就挂起当前事务;

NOT_SUPPORTED:非事务方式运行,如当前存在事务,就挂起当前事务;

NEVER:非事务方式运行,如当前存在事务,则抛出异常;

NESTED:如当前存在事务,则创建一个事务作为当前事务的子事务运行,随当前事务一起提交,当前事务回滚子事务也回滚,子事务可以独立回滚,当前事务不会回滚(前提当前事务try-catch子事务异常);如当前不存在事务,等价于REQUIRED;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/139722.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • ASP脚本_笛子入门基础教程手指训练

    ASP脚本_笛子入门基础教程手指训练通过前两篇的学习,相信各位已经对ASP的动态网站设计有了一个基本的概念和整体的印象。从本篇开始作者将从脚本语言的使用着手,由浅入深地带领大家探索ASP动态网站设计的真正奥秘。本文第二篇刊登后

  • centos7 command not found_centos7 failed to start LSB

    centos7 command not found_centos7 failed to start LSB在进行CentOS最小化安装后,会发现lspci命令不好使。其实是因为相应的软件包没有安装。在终端中执行下列命令:$yumwhatprovides*/lspci将会得到如下的显示内容pciutils-3.1.4-9.el6.x86_64:PCIbusrelatedutilitiesRepo:baseMatchedfrom:Filename…

  • Logback日志工具使用详解

    Logback日志工具使用详解由于Logback比log4j和SLF4J拥有众多优点,如性能(据说有时达到10倍以上),并且支持自动加载配置文件,自动删除旧的日志文件,以及同一个logback配置文件同时适应开发,测试,生产等。因此Logback官方强烈建议开发人员从log4j转到使用Logback。

  • pycharm2022 linux版激活码_最新在线免费激活

    (pycharm2022 linux版激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html1M2OME2TZY-eyJsaWNlbnNlSW…

  • Tomcat安装(详细)

    Tomcat安装(详细)1、Tomcat下载安装​ 1、安装​ (一)Tomcat官网下载​ (二)解压​ (三)配置环境变量​ (四)启动-关闭Tomcat ​ (五)访问测试Tomcat输入http://localhost:8080网页打不开​ 2、了解配置文件及目录结构可以配置启动端口号默认端口号:8080MySQL默认:3306http:80https:443<Connectorport=”8080″protocol=”HTTP/1.1

  • 五大常用算法之三:贪心算法[通俗易懂]

    五大常用算法之三:贪心算法[通俗易懂]贪心算法一、基本概念:所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号