我是 Spring 新手,开始在项目中使用 Spring Boot。我们有一个用例,将数据库更改和少量外部 API 调用作为一个事务来实现。请建议,这可以用弹簧
@Transactional
吗?
API 调用是否需要成为交易的一部分?
如果答案是否定的,我建议使用
TransactionTemplate.doInTransaction()
将 API 请求留在 Tx 之外。
如果您需要在 Tx 内发出 API 请求,我建议您不要这样做,您将在这些请求期间锁定数据库资源。
您还可以搜索并了解有关
eventual consistency
型号的更多信息。
使用
@Transactional
进行多个数据库更改作为一个事务当然可以通过注释实现,但对于外部 API 调用则不然。您必须为此实现一些自定义逻辑 - 必须有端点来撤消您最后的操作,并且您必须在 try-catch 块中手动调用它们。例如,如果外部 API 调用创建了一个项目,则还必须有一个端点来删除项目等。
总结一下 - 使用
@Transactional
注释将数据库更改作为一个事务来实现是可以的,但对于外部 API 调用来说还不够。