spring ----> 事务:传播机制和接口TransactionDefinition
spring事务:
编程式事务(细粒度)
声明式事务(粗粒度,xml或者注解格式)
spring接口TransactionDefinition:
TransactionDefinition接口定义了事务传播行为 类型(7种),事务隔离类型(5种),超时设置等。

文档翻译:
定义Spring兼容事务属性的接口。 基于类似于EJB CMT属性的传播行为定义。
请注意,隔离级别和超时设置不会得到应用,除非实际的新事务开始。 只有PROPAGATION_REQUIRED,PROPAGATION_REQUIRES_NEW和PROPAGATION_NESTED可以导致这种情况,在其他情况下指定这些设置通常没有意义。 此外,请注意,并非所有事务管理器都支持这些高级功能,因此在给定非默认值时可能会引发相应的异常。
只读标志适用于任何事务上下文,无论是由实际资源事务支持还是在资源级别上以非事务方式操作。 在后一种情况下,该标志仅适用于应用程序内的托管资源,如Hibernate会话。
0、propagation_required

文档翻译:
支持当前事务; 如果不存在,则创建一个新的。 类似于同名的EJB事务属性。
这通常是事务定义的默认设置,通常定义事务同步范围。
1、propagation_supports

文档翻译:
支持当前事务; 如果不存在,则以非事务方式执行。 类似于同名的EJB事务属性。
注意:对于具有事务同步的事务管理器,PROPAGATION_SUPPORTS与完全没有事务稍有不同,因为它定义了同步可能适用的事务范围。 因此,相同的资源(JDBC连接,Hibernate会话等)将被共享给整个指定的范围。 请注意,确切的行为取决于事务管理器的实际同步配置!
一般来说,请小心使用PROPAGATION_SUPPORTS! 特别是,不要依赖PROPAGATION_SUPPORTS范围内的PROPAGATION_REQUIRED或PROPAGATION_REQUIRES_NEW(这可能会导致运行时出现同步冲突)。 如果这种嵌套是不可避免的,请确保正确配置事务管理器(通常切换到“实际事务同步”)。
2、propagation_mandatory

文档翻译:
支持当前事务; 如果没有当前事务存在,则抛出异常。 类似于同名的EJB事务属性。
请注意,PROPAGATION_MANDATORY范围内的事务同步将始终由周围事务驱动。
3、propagation_requires_new

文档翻译:
创建一个新的事务,如果存在,暂停当前事务。 类似于同名的EJB事务属性。
注意:实际的事务暂停将无法在所有事务管理器上直接使用。 这特别适用于org.springframework.transaction.jta.JtaTransactionManager,它要求使javax.transaction.TransactionManager可用(它是标准Java EE中的服务器特定的)。
PROPAGATION_REQUIRES_NEW范围始终定义自己的事务同步。 现有的同步将被暂停并恢复正常。
4、propagation_not_supported

文档翻译:
不支持当前事务; 而总是执行非事务性的。 类似于同名的EJB事务属性。
注意:实际的事务暂停将无法在所有事务管理器上直接使用。 这特别适用于org.springframework.transaction.jta.JtaTransactionManager,它要求使javax.transaction.TransactionManager可用(它是标准Java EE中的服务器特定的)。
请注意,事务同步在PROPAGATION_NOT_SUPPORTED范围内不可用。 现有的同步将被暂停并恢复正常。
5、propagation_never

文档翻译:
不支持当前事务; 如果当前事务存在,则抛出异常。 类似于同名的EJB事务属性。
请注意,事务同步在PROPAGATION_NEVER范围内不可用。
6、propagation_nested

文档翻译:
如果当前事务存在,则在嵌套事务内执行,其行为类似于PROPAGATION_REQUIRED 。 EJB中没有类似的功能。
注意:实际创建嵌套事务只适用于特定事务管理器。 开箱即用,这只适用于在处理JDBC 3.0驱动程序时使用JDBC org.springframework.jdbc.datasource.DataSourceTransactionManager。 一些JTA提供者也可能支持嵌套事务。
事务隔离等级:
什么是脏读?
a和b交易同时进行,a交易正在更新数据而未提交,b交易读取该数据,导致b交易可能获得不正确的数据
什么是幻读?
同一交易期间获取的记录数不一致。a第一次读取获得记录数是2,b增加了1,a再次读取获得记录数是3。
什么是不可重复读?
a交易两次读取同一个字段得到的数据不一致
【幻读和不可重复读的区别如下:】参考博客:https://blog.csdn.net/han1196639488/article/details/77442946
提醒:
不可重复读的重点是修改,同样的条件,你读取过的数据,再次读取出来发现值不一样了
幻读的重点在于新增或者删除,同样的条件,第 1 次和第 2 次读出来的记录数不一样
1、ISOLATION_DEFAULT = -1

文档翻译:
使用底层数据存储的默认隔离级别。 所有其他级别对应于JDBC隔离级别。
2、ISOLATION_READ_UNCOMMITTED = 1

文档翻译:
表示可能发生脏读,不可重复读和幻读。
这个级别允许一个事务改变的行被另一个事务读取,然后该行的任何改变被提交(“脏读”)。 如果任何更改回滚,则第二个事务将检索到无效行。
3、ISOLATION_READ_COMMITTED = 2

文档翻译:
指示防止脏读; 不可重复读取和幻像读取可能发生。
这个级别只禁止一个事务读取一行,并在其中有未提交的变化
4、ISOLATION_REPEATABLE_READ = 4

文档翻译:
指示防止脏读和不可重复读取; 幻读取可能会发生。
这个级别禁止一个事务读取一个没有提交变化的行,它也禁止如下情况:一个事务读取一行,
第二个事务改变行,第一个事务重新读取行,第二次获取不同的值(“不可重复读取”)。
5、ISOLATION_SERIALIZABLE = 8

文档翻译:
表示禁止脏读,不可重复读取和幻像读取。
该级别包括ISOLATION_REPEATABLE_READ中的禁止条件,并进一步禁止如下的情况:一个事务读取满足WHERE条件的所有行,第二个事务插入一条满足该WHERE条件的行,
并且第一个事务以这些相同的条件重新读取,在第二次读取中检索另外的“幻像”行。
spring事务xml配置:
<!-- 事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 传播行为 -->
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="create*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
<tx:method name="select*" propagation="SUPPORTS" read-only="true" />
<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
</tx:attributes>
</tx:advice>
<!-- 切面 -->
<aop:config>
<aop:advisor advice-ref="txAdvice"
pointcut="execution(* com.rui.service..*.*(..))" />
</aop:config>
推荐:
https://www.cnblogs.com/softidea/p/5962612.html
https://blog.csdn.net/yuanlaishini2010/article/details/45792069
https://www.cnblogs.com/cxxjohnson/p/4923792.html
spring ----> 事务:传播机制和接口TransactionDefinition的更多相关文章
- spring事务传播机制实例讲解
http://kingj.iteye.com/blog/1680350 spring事务传播机制实例讲解 博客分类: spring java历险 天温习spring的事务处理机制,总结 ...
- Spring事务传播机制和数据库隔离级别
Spring事务传播机制和数据库隔离级别 转载 2010年06月26日 10:52:00 标签: spring / 数据库 / exception / token / transactions / s ...
- spring 事务传播机制
spring 事务 传播机制 描述的 事务方法直接相互调用,父子事物开启,挂起,回滚 等的处理方式. 绿色的 那几个 我认为比较重要. 1 , @Transactional(propagation=P ...
- Spring事务传播机制与隔离级别(转)
Spring事务传播机制与隔离级别 博客分类: Spring 转自:http://blog.csdn.net/edward0830ly/article/details/7569954 (写的不错) ...
- 面试突击87:说一下 Spring 事务传播机制?
Spring 事务传播机制是指,包含多个事务的方法在相互调用时,事务是如何在这些方法间传播的. 既然是"事务传播",所以事务的数量应该在两个或两个以上,Spring 事务传播机制的 ...
- Spring事务传播机制
Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播,即协调已经有事务标识的方法之间的发生调用时的事务 ...
- 18个示例详解 Spring 事务传播机制(附测试源码)
什么是事务传播机制 事务的传播机制,顾名思义就是多个事务方法之间调用,事务如何在这些方法之间传播. 举个例子,方法 A 是一个事务的方法,方法 A 执行的时候调用了方法 B,此时方法 B 有无事务以及 ...
- spring事务传播机制的测试结果
/** * @Component是个一般性的注解,使用此注解修饰的POJO类,有value属性,指定bean的id.也可不写.默认值是类名首字母小写 * @Resource是控制依赖注 ...
- spring事务传播机制与隔离级别、通知类别
Spring在TransactionDefinition接口中规定了7种类型的事务传播行为, 它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播: 事务传播行为类型 说明 PROPAGATIO ...
随机推荐
- NOIP 2016 天天爱跑步 (luogu 1600 & uoj 261) - 线段树
题目传送门 传送点I 传送点II 题目大意 (此题目不需要大意,我认为它已经很简洁了) 显然线段树合并(我也不知道哪来这么多显然) 考虑将每条路径拆成两条路径 s -> lca 和 t -> ...
- BottomNavigationBar 底部导航控件
BottomNavigationBar 底部导航控件 属性 说明BottomNavigationBarItem 多个 item,iconSize icon大小currentIndex 默认选中第几个o ...
- P2057 [SHOI2007]善意的投票
思路 简单的最小割模型 最小割的模型就是选出一些边,把点集划分成S和T两个部分,使得代价最小 到这题上就是板子了 代码 #include <cstdio> #include <alg ...
- p3302 [SDOI2013]森林(树上主席树+启发式合并)
对着题目yy了一天加上看了一中午题解,终于搞明白了我太弱了 连边就是合并线段树,把小的集合合并到大的上,可以保证规模至少增加一半,复杂度可以是\(O(logn)\) 合并的时候暴力dfs修改倍增数组和 ...
- BZOJ 4399 魔法少女LJJ(线段树合并)
题意 https://www.lydsy.com/JudgeOnline/problem.php?id=4399 思路 码农题,需要一定代码功底.方法很暴力,先将权值离散,表示在线段树里储存的位置,每 ...
- Google advertiser api开发概述
对象.方法和服务 AdWords API 主要供 AdWords 的高级用户使用.如果您是 AdWords 新手,或需要复习 AdWords 基本概念,请查看 AdWords 基础知识页面. 对象层级 ...
- eclipse安装spring boot插件spring tool suite
进行spring cloud的学习,要安装spring boot 的spring -tool-suite插件,我在第一次安装时,由于操作不当,两天才完全安装好,真的是要命了,感觉自己蠢死!下面就自己踩 ...
- js中属性点.和中括号[]的关系。
本来这里说的是 js 执行一个字符串形式函数的方法. 但是呢看到一个 window['test'] ,居然一下子转不过弯来.这就尴尬了. 不是说好了 [] 和 . 其他都是 “什么的什么” 关系吗?如 ...
- springmvc通过ajax异步请求返回json格式数据
jsp 首先创建index.jsp页面 <script type="text/javascript"> $(function () { $("#usernam ...
- vs项目的属性页面总结
本文主要针对vs中属性页面的相关选项含义进行了总结.