环境准备
这次的分享偏使用, 不探索 ShardingSphere 的代码过程 ( 实际是我还没编译通过… )
主要准备是 MySQL 主从环境, 我这里直接在 windows 上安装 mysql 5.7, 并拷贝了一份当做从库, 链接如下: https://blog.youkuaiyun.com/a345203172/article/details/106911270
更加方便的方式是启动 docker 来做一主多从的环境.
读写分离
在 ShardingSphere-5.0.0-alpha 中我是使用这样一段代码来实现读写分离:
@Bean(name = "dataSource")
public DataSource getDataSource() throws SQLException {
// 创建主从库数据源连接池
Map<String, DataSource> dataSourceMap = new HashMap<>();
dataSourceMap.put("master", DataSourceUtil.createDataSource(url_master));
dataSourceMap.put("slave", DataSourceUtil.createDataSource(url_slave));
// 创建主从配置信息类
ReplicaQueryDataSourceRuleConfiguration dataSourceConfig = new ReplicaQueryDataSourceRuleConfiguration(
"master_slave_datasource", "master",
Arrays.asList("slave"), null);
// 创建规则配置类
ReplicaQueryRuleConfiguration ruleConfig = new ReplicaQueryRuleConfiguration(
Collections.singleton(dataSourceConfig), Collections.emptyMap());
// 工厂获得数据源
return ShardingSphereDataSourceFactory.createDataSource(dataSourceMap, Collections.singleton(ruleConfig), new Properties());
}
这里的核心是 ReplicaQueryRuleConfiguration 类, 可以配置主从的查询规则 (一主N从), 也可以配置从库的负载均衡策略 (我这里的代码是传入空集合, 使用默认的轮训策略).
然而在 5.0.0-beta 版中, 这块的内容是有所变化, 改后的代码如下:
@Bean(name = "dataSource")
public DataSource