首页 > 解决方案 > Spring @Transactional 和长期运行的业务逻辑

问题描述

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

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

标签: javaspringjpaspring-data-jpaspring-transactions

解决方案


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

你必须打破单一的方法。

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

参考 -示例代码供参考示例代码在这里


推荐阅读