V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
studyrun
V2EX  ›  程序员

关于 MySQL 的 Java 驱动主从分离的连接方式 jdbc:mysql:replication

  •  2
     
  •   studyrun · 2023-01-14 17:02:37 +08:00 · 1077 次点击
    这是一个创建于 680 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-source-replica-replication-connection.html

    Connection conn = DriverManager.getConnection("jdbc:mysql:replication://source,replica1,replica2,replica3/test",props);
    // Perform read/write work on the source by setting the read-only flag to "false"
    conn.setReadOnly(false);
    conn.setAutoCommit(false);
    conn.createStatement().executeUpdate("UPDATE some_table ....");
    conn.commit();
    // Now, do a query from a replica, the driver automatically picks one from the list
    conn.setReadOnly(true);
    ResultSet rs = conn.createStatement().executeQuery("SELECT a,b FROM alt_table");
    

    按照官方文档说明写了个 demo 实验,我写的时候必须 setReadOnly(false),读的时候 setReadOnly(true)才生效,如果是事务,我还得设置回 false 。一套下来,我还得自己写代码控制,还不如按照网上其他的方案用包分离或者注解指定数据源。

    此外,MySQL 官方还有个 MySQL proxy 的东西貌似也是这个操作,就让我很无语。

    不知道是我理解的不够,还是说这东西真的是垃圾?望大佬指点

    2 条回复    2023-01-15 09:51:54 +08:00
    javapythongo
        1
    javapythongo  
       2023-01-14 18:07:20 +08:00
    写个工具类包装下 setReadOnly
    zed1018
        2
    zed1018  
       2023-01-15 09:51:54 +08:00   ❤️ 1
    推荐弄个 proxysql 中间件,中间件处理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1011 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:02 · PVG 07:02 · LAX 15:02 · JFK 18:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.