【问题标题】:Multiple databases (Postgresql in RDS) but same spring repository and entity多个数据库(RDS 中的 Postgresql)但相同的 spring 存储库和实体
【发布时间】:2023-02-09 21:34:42
【问题描述】:

我有一个用例,我需要在两个不同的区域创建完全相同的postgresql 数据库。这两个数据库中的一切都是相同的,即same schema and same tables and same data

我有一个使用实现distributed transaction。因此,如果一个请求登陆 region-a 并写入 region-a 数据库,比如说 Person 表,那么必须将完全相同的记录写入这两个数据库中的 Person 表中,或者如果有任何错误,写入尝试应该是回滚。

我想弄清楚我是否可以在春季将两个不同的数据源与相同的 Person 实体和 CRUD 存储库相关联,以便 respoistory.save() 方法可以写入两个数据库中的 Person 表。

到目前为止,我遇到过AbstractRoutingDataSource,但那是为了在数据库中实现多租户。发现其他解决方案略有不同,用例是在不同的数据库中写入不同的记录(主要是基于各种数据点的分片)。

spring 是否提供任何开箱即用的解决方案,以便我可以在两个不同的数据库中实现对同一个表的事务写入。

【问题讨论】:

    标签: spring transactions spring-data spring-transactions spring-repositories


    【解决方案1】:

    spring 是否提供任何开箱即用的解决方案,以便我可以在两个不同的数据库中实现对同一个表的事务写入。

    取决于您对“开箱即用”的定义——它本身并不实现分布式事务,但确实支持使用实现分布式事务的库。然而,让一切正常工作相对复杂,并且需要在您的运行时环境中仔细配置额外的组件。

    关于分布式事务的 Spring Boot 2.x 文档在这里:https://docs.spring.io/spring-boot/docs/2.7.x/reference/htmlsingle/#io.jta

    Spring Boot 3.x 文档在这里:https://docs.spring.io/spring-boot/docs/current/reference/html/io.html#io.jta 但同样值得注意的是,对于 3.x,Spring Boot 团队已经改变了方向并决定相关 JTA 提供商应该提供集成支持(参见 https://github.com/spring-projects/spring-boot/issues/28589 ),所以有像https://github.com/snowdrop/narayana-spring-boot这样的项目

    【讨论】:

      猜你喜欢
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 2018-07-18
      • 2019-04-17
      • 2019-02-14
      • 2020-02-06
      • 2016-07-06
      • 1970-01-01
      相关资源
      最近更新 更多