【发布时间】:2018-02-16 04:33:27
【问题描述】:
我是 spring 新手,开始在项目中使用 spring boot。我们有一个将数据库更改和少量外部 API 调用作为一个事务来实现的用例。请建议,春天@transactional可以做到这一点吗?
【问题讨论】:
标签: spring-boot spring-transactions
我是 spring 新手,开始在项目中使用 spring boot。我们有一个将数据库更改和少量外部 API 调用作为一个事务来实现的用例。请建议,春天@transactional可以做到这一点吗?
【问题讨论】:
标签: spring-boot spring-transactions
API 调用是否需要成为事务的一部分?
如果答案是否定的,我建议使用 TransactionTemplate.doInTransaction() 将 API 请求留在 Tx 之外。
如果您需要在 Tx 中发出 API 请求,我建议您不要这样做,您将在这些请求期间锁定数据库资源。
您还可以搜索并了解有关eventual consistency 模型的更多信息。
【讨论】:
使用@Transactional 进行多个数据库更改,因为一个事务当然可以通过注释来实现,但对于外部 API 调用则不然。您必须为此实现一些自定义逻辑 - 必须有端点来撤消您的最后一个操作,并且您必须在 try-catch 块中手动调用它们。例如,如果外部 API 调用创建了一个项目,那么还必须有一个端点来删除一个项目等等。
总结一下 - 使用@Transactional 注释来实现数据库更改作为一个事务很好,但对于外部 API 调用来说还不够。
【讨论】: