我在spring@transactional上遇到了一些问题,希望能在这里找到解决方案。我在服务中有一个标记为@transactional的方法,它通过调用一个方法来通过http协议请求数据(我现在正在使用apachehttpclient),解析响应并将结果写入数据库。由于它都在一个方法中工作,我担心这可能会导致事务取消,因为我的项目有事务时间限制,来自外部api的请求可能非常长。
在这里,我想知道在这种情况下如何最正确地分离http请求+响应解析和数据库操作。作为一种选择,可以有两种方法,一种用于事务,另一种用于逻辑的其余部分,但我已经有一个假设,即对于此类任务有一个普遍接受的设计模式。
1条答案
按热度按时间oprakyz71#
单个@traactional方法中不同类型的i/o可能会导致问题。如果api调用在一段时间内响应非常慢,则此方法将在等待响应时保留借用的连接。
你必须打破单一的方法。
method1将进行其余调用。收到http状态码为200的响应正常。将其储存在适当的收藏中。
方法2将处理方法1中的记录。您可以在transactiontemplate上浏览。
请参阅-示例代码以供参考,此处为示例代码