当前位置: 首页 > news >正文

Spring-事务属性

1.隔离属性

数据库对于隔离属性的支持

隔离属性的值MySQLOracle

ISOLATION.READ_COMMITTED

    √    
ISOLATION.REPEATABLE_READ×
ISOLATION.SERIALIZABLE

Oracle不支持REPEATABLE_READ值 如何解决不可重复度

采用的多版本比对的方式 解决不可重复读

 默认隔离属性

ISOLATION_DEFAULT:会调用不用数据库设置的默认隔离属性

MySQL:REPEATABLE_READ

Oracle:READ_COMMITED

查看默认的隔离属性

MySQL

select @@tx_isolation 

Oracle

隔离属性在实战中的建议

 推荐使用Spring指定的ISOLATION_DEFAULT

1.MySQL: repeatable_read

2.Oracle:     read_commited

未来实战中,并发访问情况 很低


如果真遇到并发问题

乐观锁

 2.传播属性(PROPAGATION)

传播属性的概念

概念:描述了事务解决嵌套问题的特征

什么叫事务的嵌套:指的是一个大的事务中,包含了若干小的事务

问题:大事务中融入了很多小的事务,他们彼此影响,最终会导致外部大的事务,丧失了事务的原子性

举例:

示例场景(银行转账):

  1. 外层事务:A 向 B 转账 100 元

    • 从 A 账户扣款 100

    • 向 B 账户增加 100

  2. 内层事务:记录交易日志(独立提交)

    • 写入日志表 "A 转 100 给 B"(立即提交,不可回滚)

  3. 外层事务后续检查:发现 A 账户余额不足,触发回滚

    • A 和 B 的金额恢复原状

    • 但日志记录已提交,无法撤销

  • 资金状态回滚(转账未实际发生)

  • 日志却保留(与实际数据不一致)

  • 违反原子性(事务未整体成功或失败)

 传播属性的值以及用法

 

 Spring默认的传播属性的值

REQUIRED是传播属性的默认值

 推荐传播属性的使用方式

增删改 方法:默认值

查询 操作现实的设置为SUPPORTS

 

 3.只读属性(readOnly)

针对只进行查询操作的业务方法,可以加入只读属性,提高运行效率(可以避免加锁操作

默认值是false

 4.超时属性

事务等待的最长时间

1.为什么进行等待?

        当前事务访问数据时,有可能访问的数据被别的事务进行加锁的处理,那么此事务必须被等待。

2.等待时间 秒

3.@Transactional(timeout=2)

4.超时属性默认-1 最终由对应数据库指定

 5.异常属性

Spring处理过程中

默认 对于RuntimeException及其子类 采用的是回滚的策略

默认 对于Exception及其子类 采用提交的策略


rollbackFor={java.lang.Exception.class} (少用)
noRollbackFor(java.lang.RuntimeException) 设置不回滚 (少用)

5.事务属性常见配置总结

1.隔离属性 默认值

2.传播属性 Required(默认值) 增删改 Supports 查询操作

3.只读属性 readOnly false 增删改 true 查询操作

4.超时属性 默认值 -1

5.异常属性 默认值

增删改

@Transactional

查询操作

@Trasactional(propagation=Propagation.SUPPORTS,readOnly=true)

 

相关文章:

  • 一条命令配置移动端(Android / iOS)自动化环境
  • 9、Linux C 消息队列和信号灯
  • leetcode 2360. 图中的最长环 困难
  • 什么是动态代理?动态代理和静态代理的区别
  • 轮询、WebSocket 和 SSE:实时通信技术全面指南(含C#实现)
  • 从零开始打造HTML5拼图游戏:一个Canvas实战项目
  • hadoop集群配置-scp拓展使用
  • 基于WebSocket的金融数据实时推送系统架构设计对接多国金融数据API
  • SQL SELECT DISTINCT 语句详解:精准去重的艺术
  • Leetcode-100 二叉树引发的递归思考
  • SpringBoot整合Elasticsearch详细教程
  • [Html]overflow: auto 失效原因,flex 1却未设置min-height overflow的几个属性以及应用场景
  • 前沿技术有哪些改变生活新趋势
  • c#使用forms实现helloworld和login登录
  • java根据表达式获取对象中的值,设置值
  • UDP网络通信
  • PyTorch 深度学习实战(30):模型压缩与量化部署
  • 【doris】Apache Doris简介
  • 用 React + TypeScript + Antd 打造一个动态加载的树形穿梭选择组件
  • 深入理解指针(5)(C语言版)
  • 迅速让一个wordpress/推广优化关键词
  • 四川网站建设公司/百度站长管理平台
  • 临西网站建设公司/网站域名在哪里查询
  • 做网站要什么步骤/竞价托管一般多少钱
  • 怎么在搜狐快站上做网站/网站seo优化分析
  • 网站建设的常见问题/杭州百度公司在哪里