一、官方例程解读
官方例程 raw-jdbc-nodep-example 解读
/**
* Sharding类型:
* 1 分库demo
* 2 分表demo
* 3 同时分库和分表demo
* 4 主从demo
* 5 Sharding主从demo
*/
1. Demo1 分库
- 数据源配置
@Override
public DataSource getDataSource() throws SQLException {
/**
* 初始化ShardingRule配置类
*/
ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
/**
* 设置TableRule和ItemRule表规则
*/
shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration());
shardingRuleConfig.getTableRuleConfigs().add(getOrderItemTableRuleConfiguration());
/**
* 设置默认的分库策略配置(setDefaultDatabaseShardingStrategyConfig方法是分库方法)
* (分库依据是参数user_id, 分库算法是表名最后一个后缀2取余)
*/
shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(
new InlineShardingStrategyConfiguration("user_id",
"demo_ds_${user_id % 2}"));
/**
* 获取数据源对象
*/
return ShardingDataSourceFactory.createDataSource(createDataSourceMap(), shardingRuleConfig, new HashMap<String, Object>(), new Properties());
}
2. Demo2 分表
- 数据源配置
public DataSource getDataSource() throws SQLException {
ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
/**
* 设置t_order和t_order_item的表规则
*/
shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration());
shardingRuleConfig.getTableRuleConfigs().add(getOrderItemTableRuleConfiguration());
/**
* 将表t_order和t_order_item添加到绑定的表组中
*/
shardingRuleConfig.getBindingTableGroups().add("t_order, t_order_item");
/**
* 设置分表策略(分表依据列order_id)
*/
shardingRuleConfig.setDefaultTableShardingStrategyConfig(
new StandardShardingStrategyConfiguration("order_id",
new PreciseModuloShardingTableAlgorithm()));
return ShardingDataSourceFactory.createDataSource(createDataSourceMap(),
shardingRuleConfig, new HashMap<String, Object>(), new Properties());
}
-. 分表配置
private static TableRuleConfiguration getOrderTableRuleConfiguration() {
TableRuleConfiguration result = new TableRuleConfiguration();
result.setLogicTable("t_order");
// 设置实际的数据节点(即哪张表,表0或者表1)
result.setActualDataNodes("demo_ds.t_order_${[0, 1]}"); // 分表才会设置
// 设置主键生成列
result.setKeyGeneratorColumnName("order_id");
return result;
}
-
运行结果
demo2.png
3. Demo3 同时分库分表
- 数据源配置
@Override
public DataSource getDataSource() throws SQLException {
ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration());
shardingRuleConfig.getTableRuleConfigs().add(getOrderItemTableRuleConfiguration());
shardingRuleConfig.getBindingTableGroups().add("t_order, t_order_item");
/**
* 分库策略配置DatabaseSharding
*/
shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(
new InlineShardingStrategyConfiguration("user_id",
"demo_ds_${user_id % 2}"));
/**
* 分表策略配置TableSharding
*/
shardingRuleConfig.setDefaultTableShardingStrategyConfig(
new StandardShardingStrategyConfiguration("order_id",
new PreciseModuloShardingTableAlgorithm()));
return ShardingDataSourceFactory.createDataSource(createDataSourceMap(),
shardingRuleConfig, new HashMap<String, Object>(), new Properties());
}
-. 分库分表配置
private static TableRuleConfiguration getOrderTableRuleConfiguration() {
TableRuleConfiguration result = new TableRuleConfiguration();
result.setLogicTable("t_order");
/**
* 分表依据
*/
result.setActualDataNodes("demo_ds_${0..1}.t_order_${[0, 1]}");
result.setKeyGeneratorColumnName("order_id");
return result;
}
private static TableRuleConfiguration getOrderItemTableRuleConfiguration() {
TableRuleConfiguration result = new TableRuleConfiguration();
result.setLogicTable("t_order_item");
/**
* 分表依据
*/
result.setActualDataNodes("demo_ds_${0..1}.t_order_item_${[0, 1]}");
return result;
}
- 运行结果:同上
4. Demo4 主从
-. 数据源配置
@Override
public DataSource getDataSource() throws SQLException {
MasterSlaveRuleConfiguration masterSlaveRuleConfig = new MasterSlaveRuleConfiguration();
/**
* 设置主从配置名称
*/
masterSlaveRuleConfig.setName("demo_ds_master_slave");
/**
* 设置主数据源名称
*/
masterSlaveRuleConfig.setMasterDataSourceName("demo_ds_master");
/**
* 设置从数据源名称
*/
masterSlaveRuleConfig.setSlaveDataSourceNames(Arrays.asList("demo_ds_slave_0",
"demo_ds_slave_1"));
return MasterSlaveDataSourceFactory.createDataSource(createDataSourceMap(),
masterSlaveRuleConfig, new ConcurrentHashMap<String, Object>(), new Properties());
}
-. 分库分表配置 (不需要)
5. Demo5 主从数据库且分库分表
-. 数据源配置
public DataSource getDataSource() throws SQLException {
ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
/**
* 添加分库分表规则
*/
shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration());
shardingRuleConfig.getTableRuleConfigs().add(getOrderItemTableRuleConfiguration());
shardingRuleConfig.getBindingTableGroups().add("t_order, t_order_item");
/**
* 配置默认的分库策略
*/
shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(
new StandardShardingStrategyConfiguration("user_id",
new PreciseModuloShardingDatabaseAlgorithm()));
/**
* 配置默认的分表策略
*/
shardingRuleConfig.setDefaultTableShardingStrategyConfig(
new StandardShardingStrategyConfiguration("order_id",
new PreciseModuloShardingTableAlgorithm()));
/**
* 配置主从数据库规则
*/
shardingRuleConfig.setMasterSlaveRuleConfigs(getMasterSlaveRuleConfigurations());
return ShardingDataSourceFactory.createDataSource(createDataSourceMap(),
shardingRuleConfig, new HashMap<String, Object>(), new Properties());
}
-. 主从数据库配置
/**
* 设置主从数据库规则
*
* @return
*/
private static List<MasterSlaveRuleConfiguration> getMasterSlaveRuleConfigurations() {
MasterSlaveRuleConfiguration masterSlaveRuleConfig1 = new MasterSlaveRuleConfiguration();
masterSlaveRuleConfig1.setName("ds_0");
masterSlaveRuleConfig1.setMasterDataSourceName("demo_ds_master_0");
masterSlaveRuleConfig1.setSlaveDataSourceNames(Arrays.asList("demo_ds_master_0_slave_0",
"demo_ds_master_0_slave_1"));
MasterSlaveRuleConfiguration masterSlaveRuleConfig2 = new MasterSlaveRuleConfiguration();
masterSlaveRuleConfig2.setName("ds_1");
masterSlaveRuleConfig2.setMasterDataSourceName("demo_ds_master_1");
masterSlaveRuleConfig2.setSlaveDataSourceNames(Arrays.asList("demo_ds_master_1_slave_0", "demo_ds_master_1_slave_1"));
return Lists.newArrayList(masterSlaveRuleConfig1, masterSlaveRuleConfig2);
}
-. 分库配置 (数据源配置中已经配置)
/**
* 添加分表规则
*/
shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration());
shardingRuleConfig.getTableRuleConfigs().add(getOrderItemTableRuleConfiguration());
shardingRuleConfig.getBindingTableGroups().add("t_order, t_order_item");
/**
* 配置默认的分表策略
*/
shardingRuleConfig.setDefaultTableShardingStrategyConfig(
new StandardShardingStrategyConfiguration("order_id",
new PreciseModuloShardingTableAlgorithm()));
/**
* 配置默认的分库策略
*/
shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(
new StandardShardingStrategyConfiguration("user_id",
new PreciseModuloShardingDatabaseAlgorithm()));
-. 分表配置
private static TableRuleConfiguration getOrderTableRuleConfiguration() {
TableRuleConfiguration result = new TableRuleConfiguration();
result.setLogicTable("t_order");
result.setActualDataNodes("ds_${0..1}.t_order_${[0, 1]}");
result.setKeyGeneratorColumnName("order_id");
return result;
}
private static TableRuleConfiguration getOrderItemTableRuleConfiguration() {
TableRuleConfiguration result = new TableRuleConfiguration();
result.setLogicTable("t_order_item");
result.setActualDataNodes("ds_${0..1}.t_order_item_${[0, 1]}");
return result;
}
感谢你的阅读!
网友评论