Apache ShardingSphere 使用 ThreadLocal 管理主库路由标记进行强制路由。 可以通过编程的方式向 HintManager 中添加主库路由标记,该值仅在当前线程内生效。
Hint 在读写分离场景下,主要用于强制在主库进行某些数据操作。
HintManager.getInstance() 获取 HintManager 实例;HintManager.setWriteRouteOnly() 方法设置主库路由标记;HintManager.close() 清理 ThreadLocal 中的内容。与基于 Hint 的数据分片相同。
使用 hintManager.setWriteRouteOnly 设置主库路由。
与基于 Hint 的数据分片相同。
String sql = "SELECT * FROM t_order";
try (HintManager hintManager = HintManager.getInstance();
     Connection conn = dataSource.getConnection();
     PreparedStatement preparedStatement = conn.prepareStatement(sql)) {
    hintManager.setWriteRouteOnly();
    try (ResultSet rs = preparedStatement.executeQuery()) {
        while (rs.next()) {
            // ...        }
    }
}
与基于 Hint 的数据分片相同。
hintManager.setDataSourceName 设置数据库名称。String sql = "SELECT * FROM t_order";
try (HintManager hintManager = HintManager.getInstance();
     Connection conn = dataSource.getConnection();
     PreparedStatement preparedStatement = conn.prepareStatement(sql)) {
    hintManager.setDataSourceName("ds_0");
    try (ResultSet rs = preparedStatement.executeQuery()) {
        while (rs.next()) {
            // ...
        }
    }
}
