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;

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

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

(0)
上一篇 2022年5月29日 上午11:16
下一篇 2022年5月29日 上午11:16


相关推荐

  • Java数组转List的三种方式及对比

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:大脑补丁 blog.csdn.net/x541211190/article/details/79597236 …

    2021年6月26日
    87
  • 2021 Navicat 15 for MySQL激活码(JetBrains全家桶)

    (2021 Navicat 15 for MySQL激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月27日
    136
  • Delphi 2007体验!

    Delphi 2007体验!

    2021年12月6日
    38
  • css背景渐变兼容性问题解决

    css背景渐变兼容性问题解决background webkit linear gradient right 9EC2340 background moz linear gradient right 9EC2340 background o linear gradient right 9EC2340 background linear gradient toright 9EC2340

    2025年7月8日
    4
  • 如何防止ARP攻击?

    如何防止ARP攻击?前一篇博文 我们了解了 ARP 是如何工作的 以及 ARP 攻击是如何产生的 这一篇博文中 我们就来讨论一下如何防止 ARP 攻击 nbsp nbsp nbsp nbsp 通过查资料了解到 ARP 欺骗木马程序 病毒 发作时其症状表现为计算机网络连接正常 却打开网页时断时通 或由于 ARP 欺骗的木马程序 病毒 发作时发出大量的数据包 导致用户上网不稳定 极大地影响了用户的正常使用 给网络的安全带来严重的隐患 病毒原理 nbsp

    2026年3月20日
    2
  • ISO27001标准

    ISO27001标准ISMSISMS 是组织开展并改进安全工作的系统的一套思路 方法 PDCA 项目准备项目范围确定组织部门无理地点 IT 资源初次做不建议做特别大 尽量周期比较快项目的组织高管重点参与部门协作部门项目沟通机制高层领导各个部门 ISMS 实施注意事项现状调研首先业务特征 组织结构及职责组织文化与管控模式其次 IT 规划 IT 制度文件 IT 基础设施资料 IT 应用系统资料 IT 运维程序等信息安全与相关的政策 策略 程序 记录及相关报告现状控制措施有没有是否充分是否有效期望调研方式文档审查问卷调查人员访谈覆盖面访谈提纲现场走查必

    2026年3月20日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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