【问题标题】:What is a transaction boundary?什么是事务边界?
【发布时间】:2019-04-18 05:54:24
【问题描述】:

我读过this article(假设我已经知道什么是事务边界)和this SO question(无法从该问题中解读事务边界的含义)。换句话说,我发现没有明确的定义或尝试定义事务边界。我明白什么是 100% 的过渡,但从概念上讲,什么是事务边界

【问题讨论】:

    标签: java jakarta-ee transactions jta distributed-transactions


    【解决方案1】:

    您可以阅读Spring Transaction boundaries参考:

    例如,网关或服务激活器方法可以使用@Transactional 进行注释,或者TransactionInterceptor 可以在 XML 配置中定义,其切入点表达式指向应该是事务性的特定方法。最重要的是,您可以在这些场景中完全控制事务配置和边界。

    另一个重要因素是消息流中事务的边界。 事务启动时,事务上下文绑定到当前线程。因此,无论您的消息流中有多少端点和通道,只要您确保流在同一线程上继续,您的事务上下文都将被保留。 一旦您通过引入 Pollable Channel 或 Executor Channel 或在某些服务中手动启动新线程来打破它,Transactional 边界也会被打破

    【讨论】:

      【解决方案2】:

      这是事务开始或提交/回滚的地方。

      @Transactional 注释的方法例如定义了两个事务边界:当方法被调用时,事务开始,当它返回时,事务被提交/回滚。

      【讨论】:

      • 如果我的事务在事务边界之间出现错误,它是否只会在下一个事务边界处回滚而不是立即回滚?
      • 根据定义,它在下一个事务边界处回滚,因为事务边界定义了事务何时回滚。当您调用事务方法时,当您询问事务何时回滚时,它是在方法返回或抛出之后。
      • 我想我现在明白了,如果我想在方法中的所有内容完成之前回滚,我会提前返回/抛出触发回滚?
      • 是的,在大多数情况下,导致回滚的原因是抛出异常并冒泡,直到它从启动事务的方法中抛出。
      猜你喜欢
      • 2012-03-22
      • 2014-03-18
      • 2015-08-18
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 2017-03-26
      • 2017-05-22
      • 2016-06-05
      相关资源
      最近更新 更多