【问题标题】:Transaction management of JPA and external API callsJPA 和外部 API 调用的事务管理
【发布时间】:2018-02-16 04:33:27
【问题描述】:

我是 spring 新手,开始在项目中使用 spring boot。我们有一个将数据库更改和少量外部 API 调用作为一个事务来实现的用例。请建议,春天@transactional可以做到这一点吗?

【问题讨论】:

    标签: spring-boot spring-transactions


    【解决方案1】:

    API 调用是否需要成为事务的一部分?

    如果答案是否定的,我建议使用 TransactionTemplate.doInTransaction() 将 API 请求留在 Tx 之外。

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

    您还可以搜索并了解有关eventual consistency 模型的更多信息。

    【讨论】:

      【解决方案2】:

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

      总结一下 - 使用@Transactional 注释来实现数据库更改作为一个事务很好,但对于外部 API 调用来说还不够。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-24
        • 1970-01-01
        • 2010-09-09
        • 2017-12-23
        • 2018-10-24
        • 1970-01-01
        • 2012-03-25
        • 2013-09-24
        相关资源
        最近更新 更多