【问题标题】:Spring @Transactional and long-running business logicSpring @Transactional 和长期运行的业务逻辑
【发布时间】:2021-03-18 10:27:00
【问题描述】:

我在使用 Spring @Transactional 时遇到了一些问题,希望在这里找到解决方案。我在服务中有一个标记为@Transactional 的方法,它通过调用一个方法来通过HTTP 协议请求数据(我现在使用的是Apache HttpClient),解析响应并将结果写入数据库。由于这一切都在一种方法中起作用,我担心这可能会导致交易取消,因为我的项目有交易时间限制,并且来自外部 API 的请求可能真的很长。

在这里,我想知道在这种情况下如何最正确地分离 HTTP 请求+响应解析和数据库操作。作为一种选择,可以有两种方法,一种用于事务,另一种用于其余逻辑,但我已经假设此类任务存在普遍接受的设计模式。

【问题讨论】:

  • 唯一的选择是在事务边界之外进行HTTP请求,或者使用TransactionTemplate而不是注解来尽可能限制事务的跨度

标签: java spring jpa spring-data-jpa spring-transactions


【解决方案1】:

单个@Tranactional 方法中不同类型的I/O 可能会导致问题。如果 API 调用在一段时间内响应非常缓慢,则此方法将在等待响应时保留借用的 Connection。

你必须打破单一的方法。

  1. Method1 将进行其余的调用。收到带有 http 状态代码 200 OK 的响应。将其存放在合适的收藏品中。
  2. 方法 2 将处理方法 1 中的记录。您可以在 TransactionTemplate 上进行探索。

参考 - Sample code for reference, Sample code here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    相关资源
    最近更新 更多