zhuangzhimin
V2EX  ›  问与答

Java 在同一个方法中需要对两个不同的数据库进行操作

  •  1
     
  •   zhuangzhimin · Oct 23, 2018 · 2598 views
    This topic created in 2802 days ago, the information mentioned may be changed or developed.

    请问如何实现 1、要求简单,只有部分方法需要,非大规模 2、事务控制怎么处理,如果 1 插入了 2 插入不成功 1 要回滚 3、项目采用的是 spirngbooot+mybatis

    Supplement 1  ·  Oct 23, 2018
    如果我不保证事务呢,只要在一个方法里面操纵两个数据库
    Supplement 2  ·  Oct 23, 2018
    再补充一下吧,就是我想实现除了操作自己的 mybatis 配置的数据库之外,还想操作另外一个数据库,要怎么弄,比如 jdbc 可行?
    12 replies    2018-10-23 17:20:15 +08:00
    elgae
        1
    elgae  
       Oct 23, 2018
    针对两个数据库操作的代码,分别抽一个方法出来
    elgae
        2
    elgae  
       Oct 23, 2018
    @elgae 错了,忽略
    p2pCoder
        3
    p2pCoder  
       Oct 23, 2018
    跨库事务,坑很大
    尽量拆分成两个服务,rpc 调用
    jswh
        4
    jswh  
       Oct 23, 2018
    事务控制只能手动处理了吧。做到极限就做一个自己的 bin log,出错了根据 bin log 回滚。
    xmh51
        5
    xmh51  
       Oct 23, 2018
    shardingsphere 应该能满足需求,支持简单的异常直接回滚。支持柔性事物
    zhuangzhimin
        6
    zhuangzhimin  
    OP
       Oct 23, 2018
    @p2pCoder
    @jswh
    @xmh51
    如果我不保证事务呢,只要在一个方法里面操纵两个数据库
    p2pCoder
        7
    p2pCoder  
       Oct 23, 2018
    @zhuangzhimin 你这只要 mybatis 配置多数据源就行
    xiaoxinshiwo
        8
    xiaoxinshiwo  
       Oct 23, 2018
    xiaoxinshiwo
        9
    xiaoxinshiwo  
       Oct 23, 2018
    @zhuangzhimin #6 楼主一定要去看 sharding-jdbc,几年前我也有这个需求,自己实现的,各种调用,代码逻辑十分混乱,现在试用 sharding-jdbc 发现你压根就可以不用感知分库分表的存在
    Variazioni
        10
    Variazioni  
       Oct 23, 2018
    在 mybatis 里配置多数据源。。
    然后业务类里手动切换一下就行了。。
    我之前也有过类似的需求。
    但是对次要数据库操作要求很低。。
    所以主数据库用了 mybatis,次要数据库用了自己写的基于 JDBC 的一个小 ORM 框架。。。
    zhuangzhimin
        11
    zhuangzhimin  
    OP
       Oct 23, 2018
    @Variazioni 手动切换数据源 怎么手动切换?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2481 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 16:07 · PVG 00:07 · LAX 09:07 · JFK 12:07
    ♥ Do have faith in what you're doing.