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 的东西貌似也是这个操作,就让我很无语。
不知道是我理解的不够,还是说这东西真的是垃圾?望大佬指点
1
javapythongo 2023-01-14 18:07:20 +08:00
写个工具类包装下 setReadOnly
|
2
zed1018 2023-01-15 09:51:54 +08:00 1
推荐弄个 proxysql 中间件,中间件处理
|