java - Spring @Transactional 传播属性

标签 java spring spring-transactions

我有一个关于 spring 事务传播的问题。我了解不同的 Spring 事务传播,即 Propagation.REQUIRED , Propagation.REQUIRES_NEW等。我不清楚的是,在具有不同传播值的嵌套事务的情况下,它会如何表现。

例如,如果我使用 @Transactional(propagation = Propagation.REQUIRED)注释方法 m1 .如果我调用方法 m2注释为 REQUIRES_NEW .会有什么行为?如果m2出现异常它会回滚 m2 中的更改吗?以及m1或仅更改 m1 . 同样m1注释为 REQUIRES_NEWm2作为REQUIRED .

最佳答案

spring documentation for Transaction Propagation 中解释得很好.

方法的传播行为定义了 Spring 在进入/退出该方法时的行为方式,以及如果当时事务已经存在(或不存在)时会发生什么情况。

堆栈上层方法的传播行为(无论调用您的方法的是什么)都是无关紧要的。

举个例子:

外部 (m1):必需
内部(平方米):REQUIRES_NEW
结果:将为 m2 创建一个完全独立的事务,可以单独提交/回滚。具有 REQUIRED 的 m1 与 m2 无关。

外部(m1):REQUIRES_NEW
内部 (m2):必需
结果:Spring 将在输入 m2 时检查事务是否存在,如果不存在则创建事务。

关于java - Spring @Transactional 传播属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30203919/

相关文章:

java - Spring @Profile 注解在测试中不起作用

java - 嵌套事务模板

Java Config 入站文件适配器事务管理

java - 删除元素后排序循环链表未更新?

java - 为什么我的函数给出无限输出?

java - 如何获取 Java 组件 ID

java - 如何检查字符串数组中的元素是否为空?

java - 密码验证服务

Spring Security,JSESSIONID 复制问题

java - Spring 事务不工作 + JAX WS + JDBC