spring - @transactional 内部的 Spring 非事务嵌套方法与 @transactional 传播 = 支持相同
问题描述
i) 有什么区别吗,1) 如果我从 @transactional 内部调用非事务性方法,并且 2) 调用传播级别 = 支持同一 @transactional 方法的 @transactional?
ii) 如果回答问题 i) 是相同的豆子还是不同的豆子,有什么不同吗?
谢谢
解决方案
i) 有什么不同吗,
1)如果我从@transactional AND 内部调用非事务性方法
如果您在事务中调用方法,没有任何设置,事务将跨越到调用方法。
2)调用@transactional,传播级别=来自相同@transactional方法的支持?
Propagation.SUPPORTS
带注释的方法将在当前事务中执行,就像调用非事务方法一样。
在javadoc中指出了设置@Transactional(propagation = Propagation.SUPPORTS)
和不设置之间的唯一区别:@Transactional
注意:对于具有事务同步的事务管理器,PROPAGATION_SUPPORTS 与根本没有事务略有不同,因为它定义了同步将适用的事务范围。因此,相同的资源(JDBC 连接、Hibernate Session 等)将在整个指定范围内共享。请注意,这取决于事务管理器的实际同步配置。
ii) 如果回答问题 i) 是相同的豆子还是不同的豆子,有什么不同吗?
Spring@Transactional
注解默认使用 AOP 代理。
当您methodB
从methodA
同一个类中调用时,AOP 代理将不会被激活methodB
(即完全忽略@Transactional
中的注释)。methodB
当您从不同的班级调用时,行为与i)
推荐阅读
- php - 如何设置动态最大输入日期?
- amazon-web-services - AWS ElasticBeanstalk ebextensions 命令在部署期间失败,但在我手动运行时工作正常
- flask - 获取“ValueError:附件太多”
- sql - 创建更新触发器导致错误
- pygame - pygame.event.get() 出于某种原因正在循环
- android - 异常:无法在颤振中生成构建文件
- redis - Redis 的 SQL 的 SELECT count(*) 等价于什么?
- c# - 就 C# 中的字符编码而言,这些字符串可能会发生什么?从不同来源阅读时,它们的比较不同
- c++ - Why is double brace required to initialize std::array of structs
- python-3.x - CSV file for Siamese Network