public class ShardingJDBCUtils {
DataSource getShardingDataSource() throws SQLException {
ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration());
shardingRuleConfig.getBindingTableGroups().add("t_order");
return ShardingDataSourceFactory.createDataSource(createDataSourceMap(), shardingRuleConfig, new HashMap<String, Object>(), new Properties());
}
TableRuleConfiguration getOrderTableRuleConfiguration() {
TableRuleConfiguration result = new TableRuleConfiguration();
result.setLogicTable("t_order");
result.setActualDataNodes("ds0.t_order0,ds1.t_order0,ds0.t_order1,ds1.t_order1");
result.setKeyGeneratorColumnName("order_id");
return result;
}
Map<String, DataSource> createDataSourceMap() {
Map<String, DataSource> result = new HashMap<>();
result.put("ds0",createDataSource("root","xxxx","jdbc:mysql://127.0.0.1:3306/KD_C60?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false"));
result.put("ds1",createDataSource("root","xxxx","jdbc:mysql://127.0.0.1:3306/DY_CENTER?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false"));
return result;
}
private DataSource createDataSource(String username,String password,String dbUrl){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setUsername(username);
druidDataSource.setPassword((password));
druidDataSource.setUrl(dbUrl);
druidDataSource.setInitialSize(1);
druidDataSource.setMaxWait(30000);
return druidDataSource;
}
public static void main(String[] args) throws Exception{
DataSource shardingDataSource = new ShardingJDBCUtils().getShardingDataSource();
Connection connection = shardingDataSource.getConnection();
String sql = "select * from t_order order by order_id ";
PreparedStatement preparedStatement = connection.prepareStatement(sql );
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()){
String order_id = resultSet.getString("order_name");
System.out.println(order_id);
}
}
}
上述在KD_C60、DY_CENTER两个库里分别建了t_order0和t_order1两张表,使用shardingjdbc从4张表里验证可以读出数据
执行结果如下: