java吧 关注:1,216,273贴子:12,664,054
  • 11回复贴,共1

事务处理包含多数据源求助

只看楼主收藏回复

spring中是不支持同一个事务内包含对多种数据库的操作的,但是当业务层需要执行MongoDB和MySQL的插入操作(文章内容文件需要存储到MongoDB中,文章及其分类标签等信息置于MySQL),肯定是需要用到事务进行管理的,那么既然spring不支持同一事务内包含两种数据库的操作,那么要如何让对这两数据库的操作等效于在一个事务内执行呢


IP属地:广东来自Android客户端1楼2023-03-20 12:48回复
    什么意思,mongodb不是非关系型数据库嘛,mysql关系型。你只能在业务上去手动吧。我只知道redis和mysql这套的,mysql先修改,然后修改redis,mysql要是报错回滚,redis就不动


    IP属地:福建来自Android客户端2楼2023-03-20 15:54
    收起回复
      可以参考人家redis的搞法,它自己实现了TransactionSynchronization并且扩展到事务流程中,你可以在这个阶段自行提交或者回滚


      IP属地:湖南3楼2023-03-20 17:23
      收起回复
        两种数据库你要考虑的只有全成功或者全失败一致吧,各自设置状态,有一个失败就全回滚


        IP属地:广东来自Android客户端4楼2023-03-20 19:16
        回复
          事务是一种逻辑概念,又不针对某种具体实现。别说mongodb和mysql了,你mysql本身多数据源事务spring默认也不支持啊。


          IP属地:辽宁来自Android客户端5楼2023-03-20 19:53
          回复
            要想做思路也很简单,首先你得知道spring里如何自己手动控制mysql事务(非注解形式,自己可以手动rollback/commit)(百度就行),其次你得知道spring里如何手动控制mongodb事务(同上)。之后你按照自己的逻辑try catch,该提交的全提交,该回滚的全回滚不就完事了


            IP属地:辽宁来自Android客户端6楼2023-03-20 19:56
            回复
              不支持


              IP属地:北京来自Android客户端7楼2023-03-20 23:00
              回复
                别异想天开了,自己写异常处理后的数据回滚操作


                IP属地:广东来自iPhone客户端8楼2023-03-20 23:09
                回复
                  tcc


                  IP属地:广东来自Android客户端9楼2023-03-22 08:28
                  回复
                    自己实现data source借口然后在get connection重写不过这个自己写的有风险出问题


                    IP属地:湖北来自iPhone客户端10楼2023-05-16 09:23
                    回复