当前位置: 首页 > 知识库问答 >
问题:

链式事务api调用spring

陈法
2023-03-14

我有一个问题,我没有得到我的交易被提交

我的服务类是@Transactional注释的

@Transactional
class MyService{
   public void find();
   public void return(); //Return will only happen if find is updated in DB
   public void cancel(){
          find();
          return();
   }
}

我的类有3个api,它们在内部调用各自的Dao,而Dao没有被注释为事务性的。

现在如果我调用取消,我会先调用查找,然后调用返回()。但是返回()需要查找()需要将数据库更新为FIND状态。

但是,由于所有操作都发生在同一事务上,直到返回取消,所以不会提交事务。有人能帮我理解这种情况并解决它吗。

我不知道在这种情况下如何使用传播。

提前致谢。

共有1个答案

尉迟宣
2023-03-14

摘自Spring Transcation文档(Spring Doc)

在代理模式(这是默认设置)中,仅截获通过代理传入的外部方法调用。这意味着自调用(实际上是目标对象中调用目标对象的另一个方法的方法)不会在运行时导致实际事务,即使调用的方法标记为@Transactional也是如此。

在取消()方法中对查找()和返回()的调用不是事务性的。如果你想让它成为事务性的,你可以做一些类似应用程序的东西,比如应用程序常识(this.getClass()); 并调用你的方法。

 类似资料:
  • 我想在另一个Flux流中间调用Mono,向mono发送Flux参数。我正在使用SpringBoot的WebClient。 我试过这个: 但是,如何将第一个API调用的返回发送给param2?然后得到双方的回应?第一个API返回许多值,对于每个值,我需要调用第二个API。 谢谢

  • 我不明白它是如何工作的 Spring的事务注释。所以我做了下一个测试,没有实际意义,但我它显示了我的问题: 方法,transaction必需/code>)可以正常工作。其他两个返回消息No existing transaction found for transactions marked with propagation‘mandatory’。 但是如果一个非事务性方法调用一个事务性方法(用注释

  • 我正在使用WebLogic12C,在我的应用程序中提交分布式事务时,我得到了以下错误。 另外,我需要了解JTA事务超时值和上面提到的错误之间是否有任何关系。 多谢.

  • 问题 你想调用一个对象上的多个方法,但不想每次都引用该对象。 解决方案 在每次链式调用后返回 this(即@)对象 class CoffeeCup constructor: -> @properties= strength: 'medium' cream: false sugar: false

  • 本文向大家介绍SpringBoot 注解事务声明式事务的方式,包括了SpringBoot 注解事务声明式事务的方式的使用技巧和注意事项,需要的朋友参考一下  springboot 对新人来说可能上手比springmvc要快,但是对于各位从springmvc转战到springboot的话,有些地方还需要适应下,尤其是xml配置。我个人是比较喜欢注解➕xml是因为看着方便,查找方便,清晰明了。但是xm

  • 我试图理解Kafka的事务性API。此链接定义原子读-进程-写周期如下: 首先,让我们考虑原子读-进程-写周期是什么意思。简而言之,它意味着如果应用程序在某个主题分区tp0的偏移量X处消耗消息A,并在对消息A进行一些处理后将消息B写入主题分区tp1,使得B=F(A),那么只有当消息A和B被认为成功消耗并一起发布或根本不发布时,读-进程-写周期才是原子的。 它还说: 使用为至少一次交付语义配置的va