gpt4 book ai didi

java - 两个不同数据库中同时对两个表进行事务

转载 作者:行者123 更新时间:2023-12-02 13:32:59 27 4
gpt4 key购买 nike

我有 spring-boot 应用程序,其中 mybatis 作为我的 ORM。我还使用sqlserver 2012

我考虑以下场景:

void foo () {
set current datasource as Datasource D1 (connected to database D1)
do some insert on table T1 in database D1
set current datasource as Datasource D2 (connected to database D2)
do some insert on table T1 (the same name) in database D2
}

我希望能够确保它始终成功完成两个查询。否则(当至少其中之一失败时)事务将在两个数据库中回滚(我的意思是没有更改)(即使其中之一查询成功)。

我认为 foo() 上面的 @Transactional 还不够。
能达到这样的效果吗?

最佳答案

不,正如所解释的 here .

简而言之:无论您尝试什么,在某些极端情况下都行不通。正确的解决办法:

  • 将数据插入数据库 1(包含事务)
  • 创建一个 cron 作业,从数据库 1 读取数据并更新数据库 2
  • 确保您的作业可以再次运行(因此它应该始终复制所有数据,或者应该记住已处理的最后一行)。

这样,您始终可以进行简单的交易。当出现问题时,您可以重新开始该过程。不可能有数据丢失,最坏的情况是 DB 2 落后一段时间。

将 DB 1 中的数据插入到两个表中(您已经拥有的一个表和一个针对传输作业处理进行了优化的“传输”表)也可能会有所帮助。

关于java - 两个不同数据库中同时对两个表进行事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43118778/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com