我的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
}
我希望能够确保始终成功完成两个查询。否则(当其中至少有一个失败时)两个数据库中的事务将回滚(我的意思是没有更改)(即使其中一个查询成功)。
我认为@Transactional
以上foo()
是不够的
是否有可能获得这种效果?
答案 0 :(得分:0)
SQL Server提供了管理跨数据库和/或服务器分布的事务的功能。您使用BEGIN DISTRIBUTED TRANSACTION
答案 1 :(得分:0)
不,正如here所述。
简而言之:无论你怎么做,它都不会在某些角落里工作。正确的解决方案:
这样,您总是有简单的交易。当出现问题时,您可以再次启动该过程。没有数据丢失,最糟糕的情况是DB 2滞后了一段时间。
将DB 1中的数据插入两个表(您已经拥有的表和一个" transfer"表,该表经过优化以便由传输作业处理)也可能有帮助。