JPA 的事务管理和外部 API 调用

问题描述 投票:0回答:2

我是 Spring 新手,开始在项目中使用 Spring Boot。我们有一个用例,将数据库更改和少量外部 API 调用作为一个事务来实现。请建议,这可以用弹簧

@Transactional
吗?

spring-boot spring-transactions
2个回答
6
投票

API 调用是否需要成为交易的一部分?

如果答案是否定的,我建议使用

TransactionTemplate.doInTransaction()
将 API 请求留在 Tx 之外。

如果您需要在 Tx 内发出 API 请求,我建议您不要这样做,您将在这些请求期间锁定数据库资源。

您还可以搜索并了解有关

eventual consistency
型号的更多信息。


0
投票

使用

@Transactional
进行多个数据库更改作为一个事务当然可以通过注释实现,但对于外部 API 调用则不然。您必须为此实现一些自定义逻辑 - 必须有端点来撤消您最后的操作,并且您必须在 try-catch 块中手动调用它们。例如,如果外部 API 调用创建了一个项目,则还必须有一个端点来删除项目等。

总结一下 - 使用

@Transactional
注释将数据库更改作为一个事务来实现是可以的,但对于外部 API 调用来说还不够。

© www.soinside.com 2019 - 2024. All rights reserved.