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

调用必需传播的事务性函数两次只会导致1个事务(但从另一个类调用时会导致2个事务)

严昀
2023-03-14

我有一个服务类,它的方法doSomething()用@transactional进行了注释,传播类型为“required”。另一个非事务类调用了doSomething()两次。

我假设将有2个事务,为每个调用创建,但结果是两个调用只使用相同的事务。为了进一步混淆我,我使用另一个@RestController非事务性类调用了doThings()两次。但这次结果是每个调用使用不同的事务。

我有两个问题。

预期的行为是什么(1 或 2 笔交易)

为什么这里有什么区别?

NormalClass{
   @Autowired
   Service service;

   service.doSomething();
   // same transaction used
   service.doSomething(); 
}

RestController{
   @Autowired
   Service service;

   service.doSomething();
   // new transaction used
   service.doSomething();
}

Service{
   @Transactional
   doSomething(){};
}

共有1个答案

裴建华
2023-03-14

感谢@JB尼泽特,你是对的,有一个由 NormalClass 扩展的抽象类已经获得了事务。我没想到会有一个抽象类能做到这一点。

 类似资料:
  • 问题内容: 为了了解Spring事务的工作原理,我想知道在以下情况下发生的情况:如果一种方法标记为,而另一种方法标记为。 假设配置使用所有默认设置。 现在,如果我要输入,显然可以开始交易。然后,钻进去会发生什么?交易已经存在的事实会导致没有新的交易诞生,还是我在这里创建两个交易? 关于Propagation的文档(在下面引用)似乎涵盖了这一点,但是我想验证一下我的理解 Propagation:通常

  • PlayScreen类: 玩家等级: 所以,我正在使用矩形来检测我的碰撞。我已经设置了右矩形和左矩形作为我屏幕的边界线。我想给玩家分配一个精灵和一个矩形。我正在处理PlayScreen类中的碰撞,但它导致了NullPointerException。需要帮助来弄清楚为什么我得到了NullPointerException。 谢谢! 空指针异常:

  • 问题内容: 为了了解Spring事务的工作原理,我想知道在以下情况下会发生什么情况,其中一种方法标记为,而另一种方法标记为。 假设配置使用所有默认设置。 现在,如果我要输入,显然可以开始交易。然后,钻进去会发生什么?事务已经存在的事实会导致没有新的事务诞生,还是我在这里创建两个事务? 关于传播的文档(在下面引用)似乎涵盖了这一点,但是我想验证一下我的理解,这对于我的处女大脑来说可以一次理解所有知识

  • 我正在用RxJava实现一个事件总线(RxBus)。 RxBus。Java语言 从RecyclerView的viewHolder发布事件 从片段订阅事件 问题是:当我点击或时,只被调用一次(这是正确的),但是被多次调用(甚至不是常量时间)。请参阅下面的日志。 我怎样才能让它只打一次电话? 编辑:我发现如果这次被调用N次,下次当我单击该项目时将被调用N 1次。似乎可观察对象正在向订阅者发出历史记录中

  • 我使用的是Postgres 9.1。我想知道在同一个事务中使用多个SELECT FOR UPDATES是否可能导致竞争情况。 2个并发事务: 事务1:选择表1上的更新--成功获取锁 事务2:选择表2上的更新--成功获取锁 事务2:选择表1上的更新--等待从事务1释放锁 事务 1:选择更新表 2 -- 等待事务 2 中的锁定释放 在这种情况下会发生什么?其中一个等待的事务最终会超时吗?如果是,是否有

  • Spring 4.1.4 Hibernate 4.2.0 JDK 1.8 我的上下文:我有一个控制器调用-->Service-->调用Dao业务功能是删除(在1到许多DB关系中)一些子级,但不是所有子级。然后,在删除了一些子项之后,我尝试删除父项,然后我得到了java.sql.SqlIntegrityConstraintViolationException