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

2023-01-14 17:02:37 +08:00
 studyrun

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 的东西貌似也是这个操作,就让我很无语。

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

997 次点击
所在节点    程序员
2 条回复
javapythongo
2023-01-14 18:07:20 +08:00
写个工具类包装下 setReadOnly
zed1018
2023-01-15 09:51:54 +08:00
推荐弄个 proxysql 中间件,中间件处理

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/908919

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX