IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring @transactional 事务应用 -> 正文阅读

[Java知识库]Spring @transactional 事务应用

spring 事务:
?一: 理论:
? 事务(ACID):?
? A:原子性-都成功,都失败;?
? C:一致性(A转账给B,A扣了一百,B的钱一定增加);?
? I:隔离性(事务之间互不干扰);?
? D:持久性(修改是永久的)
??
? 1. 传播行为: 一个事务掉另一个事务,多个事务操作时怎么处理
? ? ?1.1 PROPAGATION_REQUIRED(默认): 当前事务存在,使用当前事务;当前不存在, 新建一个事务
?? ? 1.2 PROPAGATION_SUPPORTS: ?当前事务存在,使用当前事务;当前不存在, 则不建立事务, 用非事务方式执行
?? ? 1.3 PROPAGATION_MANDATORY: 当前事务存在,使用当前事务;当前不存在,抛异常
?? ? 1.4 PROPAGATION_REQUIRES_NEW: 当前事务存在则挂起, 新建一个事务, 两个事务独立运行,可通过捕获新建事务执行异常判断当前事务是否需要回滚操作
?? ? 1.5 PROPAGATION_NOT_SUPPORTED: 当前事务存在则挂起,用非事务方式执行
?? ? 1.6 PROPAGATION_NEVER: 当前事务存在则抛异常,用非事务方式执行
?? ? 1.7 PROPAGATION_NESTED: 当前事务存在则嵌套事务, 不存在则新建一个事务
?? ? @Transactional(propagation=Propagation.PROPAGATION_REQUIRED)
?? ??
? 2. 隔离级别:?
? ? ?并发情况会出现:
?? ? 脏读: 读取未提交数据
?? ? 不可重复读: 读取过程中有数据更新
?? ? 幻读: 修改过程中, 有数据更新
? ? ?2.1 ISOLATION_DEFAULT 默认级别?
?? ? 2.2 ISOLATION_READ_UNCOMMITTED: 读未提交的数据
?? ? 2.3 ISOLATION_READ_COMMITTED: 读已提交数据
?? ? 2.4 ISOLATION_REPEATABLE_READ(默认): 多次读取结果一致
?? ? 2.5 ISOLATION_SERIALIZABLE: 锁表,一个一个来
?? ? @Transactional(isolation = Isolation.READ_COMMITTED)
?? ? @Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
?? ??
? 3. 回滚:
? ? ?默认: RuntimeException和Error?
? ? ?@Transactional(rollbackFor=Exception.class): 让在发生非RuntimeException时也能回滚
?? ? @Transactional(rollbackFor={RuntimeException.class, Exception.class}: 多个
?? ? @Transactional(rollbackForClassName={“RuntimeException”,“Exception”}): 多个
?? ? @Transactional(notRollbackFor=Exception.class): 让在发生RuntimeException时不回滚
?? ? TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); // 手动回滚事务
?? ??
? 4. 超时: 超时则回滚
? ? ?@Transactional(timeout = 1000)
?? ??
? 5. 是否只读:
? ? ?@Transactional(readOnly = true): 只查询, 不修改 ?
?? ? ?
?二: 应用:
? 1. xml式: 略
? 2. transactional
? 2.1 原理: spring通过aop动态代理生成bean容器里面的实例,当遇到@transactional注解的类, 会生成代理类继承原来那个bean,
? ? ? ? ? ? 通过代理类调用方法才会使@transactional生效,创建事务;
? 2.1 失效原因: 1. 本类方法调用, 方法a内部调用方法b, 类似于this.b, 必须经过代理类调用才会生效, 例如, B.b();
? ? ? ? ? ? ? ? ? ? SpringContextHolder.getBean(B.class): 获取容器中B类的实例(有@transactional注解的是代理类);
? ? ? ? ? ? ? ? 2. 因为aop代理的原因, 方法必须是实现的public方法, 其他比如private, aop拿不到, 注解也就失效了
?? ??? ??? ??? ?
?? ?默认传播行为前提下:
?? ? ? ?方法a调用方法b, spring 先看a有没有事务, 然后再看b有没有事务
?? ??? ? 1. a 没有事务, a,b 都不会有事务 ?
?? ??? ? 2. a 有事务, b有事务, 遵循传播行为, a,b共用a的事务
?? ??? ? 3. a 有事务, b没有事务, 遵循传播行为, a有事务,b没有事务
? ? ? ? ??? ??? ??
?? ??? ??? ??? ?
?? ??? ??? ??? ?
?? ??? ??? ??? ?
?? ??? ??? ??? ?
?? ??? ??? ??? ?
?? ??? ??? ??? ?
?? ??? ??? ??? ?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 22:41:24  更:2022-07-04 22:45:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 15:44:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码