spring 事物的传播方式以及隔离级别

电机控制——PMSM无感FOC控制(一)FOC入门 FOC 是一种电机控制技术,全称为 Field Oriented Control(磁场定向控制),也称作矢量控制。该技术可以提高电机的效率、控制稳定性和精度,广泛应用于电机驱动系统中,是目前无刷直流电机(BLDC)、永磁同步电机(PMSM)、感应电机的高效控制的最优方法之一。本节主要讲了FOC的大致流程,带大家先了解FOC到底是个什么东西在做什么,各个模块具体的原理会放到后面的章节详细讲解。FOC其实就是通过控制,相电流按照正弦变化,从而产生出旋转的磁场,控制电机转子转动。 阅读详情



转载自:http://blog.chinaunix.net/u1/55983/showart_2091761.html

7个传播行为,4个隔离级别, 

Spring事务的传播行为和隔离级别[transaction behavior and isolated level]2007-08-01 16:33事务的传播行为和隔离级别[transaction behavior and isolated level]

Spring中事务的定义:
一、Propagation :
  key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。有以下选项可供使用:
PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。 
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。 
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。 
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。 

很多人看到事务的传播行为属性都不甚了解,我昨晚看了j2ee without ejb的时候,看到这里也不了解,甚至重新翻起数据库系统的教材书,但是也没有找到对这个的分析。今天搜索,找到一篇极好的分析文章,虽然这篇文章是重点分析PROPAGATION_REQUIRED 和 PROPAGATION_REQUIRED_NESTED的
====================================================
  
 
 
 
解惑 spring 嵌套事务 
/** 
* @date 2006-11-24 
* @note 转载自http://www.javaeye.com/topic/35907?page=1
*/
 
********TransactionDefinition 接口定义*******************
/** 
      * Support a current transaction, create a new one if none exists. 
      * Analogous to EJB transaction attribute of the same name. 
      * 
This is typically the default setting of a transaction definition. 
      */
 
     int PROPAGATION_REQUIRED = 0; 
  
     /** 
      * Support a current transaction, execute non-transactionally if none exists. 
      * Analogous to EJB transaction attribute of the same name. 
      * 

Note: For transaction managers with transaction synchronization, 
      * PROPAGATION_SUPPORTS is slightly different from no transaction at all, 
      * as it defines a transaction scopp that synchronization will apply for. 
      * As a consequence, the same resources (JDBC Connection, Hibernate Session, etc) 
      * will be shared for the entire specified scope. Note that this depends on 
      * the actual synchronization configuration of the transaction manager. 
      * @see org.springframework.transaction.support.AbstractPlatformTransactionManager#setTransactionSynchronization 
      */
 
     int PROPAGATION_SUPPORTS = 1; 
  
     /** 
      * Support a current transaction, throw an exception if none exists. 
      * Analogous to EJB transaction attribute of the same name. 
      */
 
     int PROPAGATION_MANDATORY = 2; 
  
     /** 
      * Create a new transaction, suspend the current transaction if one exists. 
      * Analogous to EJB transaction attribute of the same name. 
      * 

Note: Actual transaction suspension will not work on out-of-the-box 
      * on all transaction managers. This in particular applies to JtaTransactionManager, 
      * which requires the javax.transaction.TransactionManager to be 
      * made available it to it (which is server-specific in standard J2EE). 
      * @see org.springframework.transaction.jta.JtaTransactionManager#setTransactionManager 
      */
 
     int PROPAGATION_REQUIRES_NEW = 3; 
  
     /** 
      * Execute non-transactionally, suspend the current transaction if one exists. 
      * Analogous to EJB transaction attribute of the same name. 
      * 

Note: Actual transaction suspension will not work on out-of-the-box 
      * on all transaction managers. This in particular applies to JtaTransactionManager, 
      * which requires the javax.transaction.TransactionManager to be 
      * made available it to it (which is server-specific in standard J2EE). 
      * @see org.springframework.transaction.jta.JtaTransactionManager#setTransactionManager 
      */
 
     int PROPAGATION_NOT_SUPPORTED = 4; 
  
     /** 
      * Execute non-transactionally, throw an exception if a transaction exists. 
      * Analogous to EJB transaction attribute of the same name. 
      */
 
     int PROPAGATION_NEVER = 5; 
  
     /** 
      * Execute within a nested transaction if a current transaction exists, 
      * behave like PROPAGATION_REQUIRED else. There is no analogous feature in EJB. 
      * 

Note: Actual creation of a nested transaction will only work on specific 
      * transaction managers. Out of the box, this only applies to the JDBC 
      * DataSourceTransactionManager when working on a JDBC 3.0 driver. 
      * Some JTA providers might support nested transactions as well. 
      * @see org.springframework.jdbc.datasource.DataSourceTransactionManager 
      */
 
     int PROPAGATION_NESTED = 6; 

*************************************************************************
在这篇文章里,他用两个嵌套的例子辅助分析,我这里直接引用了。
********************sample***********************
ServiceA { 
       
     /** 
      * 事务属性配置为 PROPAGATION_REQUIRED 
      */
 
     void methodA() { 
         ServiceB.methodB(); 
     } 
  
} 
  
ServiceB { 
       
     /** 
      * 事务属性配置为 PROPAGATION_REQUIRED 
      */
 
     void methodB() { 
     } 
       
} 
*************************************************
1: PROPAGATION_REQUIRED 
加入当前正要执行的事务不在另外一个事务里,那么就起一个新的事务 
比如说,ServiceB.methodB的事务级别定义为PROPAGATION_REQUIRED, 那么由于执行ServiceA.methodA的时候, 
ServiceA.methodA已经起了事务,这时调用ServiceB.methodB,ServiceB.methodB看到自己已经运行在ServiceA.methodA 
的事务内部,就不再起新的事务。而假如ServiceA.methodA运行的时候发现自己没有在事务中,他就会为自己分配一个事务。 
这样,在ServiceA.methodA或者在ServiceB.methodB内的任何地方出现异常,事务都会被回滚。即使ServiceB.methodB的事务已经被 
提交,但是ServiceA.methodA在接下来fail要回滚,ServiceB.methodB也要回滚 

2: PROPAGATION_SUPPORTS 
如果当前在事务中,即以事务的形式运行,如果当前不再一个事务中,那么就以非事务的形式运行 


3: PROPAGATION_MANDATORY 
必须在一个事务中运行。也就是说,他只能被一个父事务调用。否则,他就要抛出异常 

4: PROPAGATION_REQUIRES_NEW 
这个就比较绕口了。 比如我们设计ServiceA.methodA的事务级别为PROPAGATION_REQUIRED,ServiceB.methodB的事务级别为PROPAGATION_REQUIRES_NEW, 
那么当执行到ServiceB.methodB的时候,ServiceA.methodA所在的事务就会挂起,ServiceB.methodB会起一个新的事务,等待ServiceB.methodB的事务完成以后, 
他才继续执行。他与PROPAGATION_REQUIRED 的事务区别在于事务的回滚程度了。因为ServiceB.methodB是新起一个事务,那么就是存在 
两个不同的事务。如果ServiceB.methodB已经提交,那么ServiceA.methodA失败回滚,ServiceB.methodB是不会回滚的。如果ServiceB.methodB失败回滚, 
如果他抛出的异常被ServiceA.methodA捕获,ServiceA.methodA事务仍然可能提交。 

5: PROPAGATION_NOT_SUPPORTED 
当前不支持事务。比如ServiceA.methodA的事务级别是PROPAGATION_REQUIRED ,而ServiceB.methodB的事务级别是PROPAGATION_NOT_SUPPORTED , 
那么当执行到ServiceB.methodB时,ServiceA.methodA的事务挂起,而他以非事务的状态运行完,再继续ServiceA.methodA的事务。 

6: PROPAGATION_NEVER 
不能在事务中运行。假设ServiceA.methodA的事务级别是PROPAGATION_REQUIRED, 而ServiceB.methodB的事务级别是PROPAGATION_NEVER , 
那么ServiceB.methodB就要抛出异常了。 

7: PROPAGATION_NESTED 
理解Nested的关键是savepoint。他与PROPAGATION_REQUIRES_NEW的区别是,PROPAGATION_REQUIRES_NEW另起一个事务,将会与他的父事务相互独立, 
而Nested的事务和他的父事务是相依的,他的提交是要等和他的父事务一块提交的。也就是说,如果父事务最后回滚,他也要回滚的。 
而Nested事务的好处是他有一个savepoint。 
***************************************** 
ServiceA { 

/** 
* 事务属性配置为 PROPAGATION_REQUIRED 
*/
 
void methodA() { 
try { 
//savepoint 

ServiceB.methodB(); //PROPAGATION_NESTED 级别 

} catch (SomeException) { 
// 执行其他业务, 如 ServiceC.methodC(); 

} 
} 

} 
******************************************** 
也就是说ServiceB.methodB失败回滚,那么ServiceA.methodA也会回滚到savepoint点上,ServiceA.methodA可以选择另外一个分支,比如 
ServiceC.methodC,继续执行,来尝试完成自己的事务。 
但是这个事务并没有在EJB标准中定义。 

二、Isolation Level(事务隔离等级): 
1、Serializable:最严格的级别,事务串行执行,资源消耗最大; 
2、REPEATABLE READ:保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了“脏读取”和“不可重复读取”的情况,但是带来了更多的性能损失。 
3、READ COMMITTED:大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”。该级别适用于大多数系统。 
4、Read Uncommitted:保证了读取过程中不会读取到非法数据。隔离级别在于处理多事务的并发问题。 
我们知道并行可以提高数据库的吞吐量和效率,但是并不是所有的并发事务都可以并发运行,这需要查看数据库教材的可串行化条件判断了。 
这里就不阐述。 
我们首先说并发中可能发生的3中不讨人喜欢的事情 
1: Dirty reads--读脏数据。也就是说,比如事务A的未提交(还依然缓存)的数据被事务B读走,如果事务A失败回滚,会导致事务B所读取的的数据是错误的。 
2: non-repeatable reads--数据不可重复读。比如事务A中两处读取数据-total-的值。在第一读的时候,total是100,然后事务B就把total的数据改成200,事务A再读一次,结果就发现,total竟然就变成200了,造成事务A数据混乱。 
3: phantom reads--幻象读数据,这个和non-repeatable reads相似,也是同一个事务中多次读不一致的问题。但是non-repeatable reads的不一致是因为他所要取的数据集被改变了(比如total的数据),但是phantom reads所要读的数据的不一致却不是他所要读的数据集改变,而是他的条件数据集改变。比如Select account.id where account.name="ppgogo*",第一次读去了6个符合条件的id,第二次读取的时候,由于事务b把一个帐号的名字由"dd"改成"ppgogo1",结果取出来了7个数据。 Dirty reads non-repeatable reads phantom reads 
Serializable 不会 不会 不会 
REPEATABLE READ 不会 不会 会 
READ COMMITTED 不会 会 会 
Read Uncommitted 会 会 会 





三、readOnly 
事务属性中的readOnly标志表示对应的事务应该被最优化为只读事务。

这是一个最优化提示。在一些情况下,一些事务策略能够起到显著的最优化效果,例如在使用Object/Relational映射工具(如:Hibernate或TopLink)时避免dirty checking(试图“刷新”)。

四、Timeout 

在事务属性中还有定义“timeout”值的选项,指定事务超时为几秒。在JTA中,这将被简单地传递到J2EE服务器的事务协调程序,并据此得到相应的解释。

YOLOv11改进策略【独家融合改进】| 模型轻量化二次改进:StarNet + FreqFusion,极限降参,适用专栏内所有轻量化模型 FreqFusion是一种旨在解决密集图像预测任务中特征融合问题。 阅读详情

相关推荐

ODrive0.5.5源码分析(1) ADC的处理

odrive 0.5.5 ADC

danger的博客 4307

Spring事务传播行为和隔离级别

link http://www.cnblogs.com/yangy608/archive/2011/06/29/2093478.html http://www.cnblogs.com/yangy608/archive/2010/12/15/1907065.html http://blog.youkuaiyun.com/it_wangxiangpan/article/details/24180085

不积跬步,无以至千里 822

ESP32 CAM使用教程(入门级)

串口被占用,可以关闭其他使用到串口的界面;先将手机也连上wifi,然后使用手机浏览器打开这个IP地址,注意手机连接的wifi需要和开发板的wifi一致,也就是程序里自己修改的那个wifi,否则无法打开IP地址;将开发板连接到电脑,点击点击工具→端口,然后选择自己实际接的COM口,不清楚COM口的可以打开电脑设备管理器查看一下,插拔设备看看哪个COM口会刷新就是哪个COM口;安装好esp32库之后,点击工具→开发板→esp32→AI Thinker ESP32-CAM,型号要仔细找找,不要选错了;

qq_34426854的博客 2万+

Spring 事务隔离级别和传播行为

Spring事务以及隔离级别,传播行为

sakialice的博客 1540

手把手教你用CsvView分析大疆无人机飞行日志(附实战CTF题解)

本文详细介绍了如何使用CsvView工具分析大疆无人机飞行日志,包括环境搭建、日志提取、核心功能解析及CTF实战技巧。通过实战案例,帮助读者掌握无人机取证的关键技术,提升日志分析能力,特别适合网络安全竞赛和实际取证场景。

weixin_42652674的博客 456

CS5523实战:如何用国产芯片完美替代LT8911设计MIPI转eDP电路(附原理图)

本文详细介绍了使用国产芯片CS5523完美替代LT8911进行MIPI转eDP电路设计的实战经验。文章从芯片选型、核心特性对比入手,深入剖析了电源时钟设计、MIPI/eDP接口的PCB布局与信号完整性要点,并提供了完整的原理图参考和调试排错指南,为硬件工程师实现国产化替代提供了清晰可行的方案。

yhn4567890的博客 1140

Spring中事务的隔离级别和传播机制

@Transactional详解之事务隔离级别及事务传播机制

关关的博客 2598

无痛安装及初始配置 PHP 8.0.3 + Apache 2.4 + MySQL 8.0

PHP 8.0.3 + Apache 2.4 + MySQL 8.0MySQL 8.0.23 安装下载安装配置环境变量初始化MySQLPHP8.0.3 安装下载安装配置环境变量Apache 2.4 安装下载安装启动 MySQL 8.0.23 安装 下载 到官方网站下载:https://dev.mysql.com/downloads/mysql/ 目前的最新版本是MySQL 8.0.23 在Windows上有两种安装方式,一个是zip压缩文件解压然后配置,另一个是图像化界面安装。 这里选择第一种方法安装:

Kuang Da's Blog 6208

一看就理解_Spring事务的7种传播行为

事务传播行为 什么叫事务传播行为?听起来挺高端的,其实很简单。 即然是传播,那么至少有两个东西,才可以发生传播。单体不存在传播这个行为。 事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。 例如:methodA事务方法调用methodB事务方法时,methodB是继续在调用者methodA的事务中运行呢,还是为自己开启一个新事务运行,这就是由methodB的事务传播行为决定的。 Spring定义了七种传播行为: 现在来

wushijuewu 1156

Oracle恢复学习实战小结

     学习oracle10g 043课程有段时间了,前一两个星期学习了backup/restore相关的内容,刚好公司有要求要为host服务器做一个备用机以防止数据意外丢失。于是,实战开始了。     首先介绍host服务器架构。host以oracle数据库作为底层数据存储,以公司总部开发的Santorin作为应用,主要提供给测试台架数据存储、数据访问、数据导入导出、用户权限管理和数据自动备份

kseawolfk的专栏 1035

Python开发者必看:5分钟搞定Gemini API的3种调用方式(含代码示例)

本文为Python开发者详细介绍了三种高效调用Gemini API的核心方式:基础同步调用、流式调用和聊天模式,并涵盖多模态应用等高级特性。通过清晰的代码示例和实战场景分析,帮助开发者快速掌握Gemini API的集成与优化,提升AI应用开发效率。

g8f9d0s1a2的博客 1122

【Spring】Spring的7种事务传播机制讲解,以及49种组合方式介绍

Spring的7种事务传播机制讲解,以及49种组合方式介绍

zxy2361380031的博客 1万+

YOLO26 数据标注工具:LabelImg、Label Studio实战指南:主流标注工具的安装配置与使用技巧,高效完成目标检测数据标注

本文介绍了目标检测中数据标注的核心地位与常用工具。数据标注质量直接影响模型性能,需要关注准确性、一致性等维度。文章详细讲解了边界框、类别标签等基本概念,并对比了LabelImg、Label Studio等主流标注工具的特点。重点介绍了LabelImg的轻量级、易用性等优势,以及Label Studio的协作功能,为不同规模项目提供标注工具选择建议。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1176

java 中的事物怎么配置_java中级开发工程师必问:spring中事物的配置方式,事物的传播方式以及隔离级别...

spring配置事物方式:spring+mybatisclass="org.springframework.jdbc.datasource.DataSourceTransactionManager">spring+hibernatenotice:@Transactional作用于类名上启用事物,该类中的public修饰的方法都启用事物同样该注解作用在某个方法上的时候,该方法也必须是publi...

weixin_31527905的博客 165

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

spring aop事务传播方式和隔离级别

一. 传播:        如果两个在代码上不相关的操作,需要放在同一个事务中,这就需要利用到传播特性了。这时调用的传播特性的值就应该是PROPAGATION_REQUIRED。在spring中只需要进行这样的配置,就实现了声明式的事物处理。       1. PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启新的事物。       2. P

daiqinge的博客 5489

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

spring的事务有几种方式?简述spring事务的隔离级别和传播行为

最近面试被问到了这个问题,之前没有总结过,还有点懵,稍微总结一下 一、spring的事务特性,这个就不多说了,ACID 二、spring实现事务的方式: 1.编码方式 2.spring配置方式 3.注解式 基于AOP技术实现的声明式事务管理,实质就是:在方法执行前后进行拦截,然后再目标方法开始之前创建并加入事务,执行完目标方法后根据执行情况提交或回滚...

成长之路 1万+

Spring事务:7种传播方式、4种隔离级别

Spring事务的代码承接jdbcTemplate的。

这是一个博客 910

spring详解事务传播属性和隔离级别

1 事务的传播属性(Propagation)  1) REQUIRED ,这个是默认的属性  Support a current transaction, create a new one if none exists.  如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。  被设置成这个级别时,会为每一个被调用的方法创建一个逻辑事务域。如果前面的方法已经创建了事务

fuwei736349065的博客 496

Spring之事物传播原理

Spring事物原理,使用AOP动态代理机制实现事物。 事物参数 propagation:传播方式 readOnly:只读,ture开启,默认false不开启 rollbackFor:指定回滚异常,默认RuntimeException异常才回滚 noRollbackFor:指定异常不回滚 timeout:超时回滚 isolation:隔离级别 事物传播方式 REQUIRED(默认)...

进击的小白 409

Spring Boot 事物管理 @Transactional

目录推荐博客引言属性value,transactionManager多事物管理器propagation传播方式isolation事物隔离级别隔离级别描述什么是脏读呢 读到了未提交的数据不可重复读和幻读的区别timeout 超时配置readOnly 制度属性rollbackFor 指定触发回滚的异常类型noRollbackFor 指定不回滚的异常类型使用案例 推荐博客 给大家推荐个靠谱的公众号程序员......

yueloveme的博客 1158

spring的事务的传播方式

事务传播行为:是指添加事物时的策略  1 PROPAGATION_REQUIRED   如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。 2  PROPAGATION_SUPPORTS   支持当前事务,如果当前没有事务,就以非事务方式执行。 3  PROPAGATION_MANDATORY   使用当前的事务,如果当前没有事务,就抛出异

8722

事物的基本概念

什么是事务 ? 用户定义一个数据库操作序列 这些操着要么成功要么失败是一个不可分割的工作单位 事务的特性 ? ACID 原子性:指事务是一个不可分割的工作单位 事务中的操作要么发生要么不发生 一致性:指事物的前后数据的完整性必须保持一致 隔离性:指多个用户并发访问数据库时一个事物不能被其他用户的事物所干扰,多个事物之间数据需要相互隔离 持久性:指一个事物一旦提交 它对数据库的改变就是永久...

Angzush的博客 605

spring事物隔离级别,传播特性由浅入深,@Transactional注解

本人在学习spring注解时通过网上各个博客浏览,把好多人的结论总结到一起,喜欢就看看吧。 spring支持编程式事务管理和声明式事务管理两种方式。 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。 声...

qq_25045173的博客 235

spring事物

  两个不同的事物是独立的 注意事物的顺序 :例如一个事物是查询一个事物是插入 先执行插入后查询两个事物, 就发生了脏读的可能, 脏读: 一个事物没有提交就被其他事物读取到了 解决方法 提高事物隔离级别 (Read_committed) 不可重复读: 同一个事物中 同一个sql语句查询出来的结果不一样 例如:执行完第一次查询后 执行了insert或者update ,再次执行第一次查询的s...

weixin_53911715的博客 133

Spring事务传播方式

SPRING中定义了以下几种事务的传播方式: 新建事务       required               支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。       requires_new     新建事务,如果当前存在事务,把当前事务挂起。   非事务方式运行       supports              支持当前事务,如果当前没有事务

许飞的博客 546

spring事务的传播方式

事务传播行为:是指添加事物时的策略  1 PROPAGATION_REQUIRED   如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。 2  PROPAGATION_SUPPORTS   支持当前事务,如果当前没有事务,就以非事务方式执行。 3  PROPAGATION_MANDATORY   使用当前的事务,如果当前没有事务,就抛出异

Spring为核心 530
下一篇: eclipse+mavens 搭建maven项目
feijiing
博客等级 码龄16年 7粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值