V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhuangzhimin
V2EX  ›  问与答

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

  •  1
     
  •   zhuangzhimin · 2018-10-23 11:51:27 +08:00 · 2177 次点击
    这是一个创建于 2242 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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