sharding jdbc学习链接
sharding-jdbc版本:2.0.3
springboot版本:2.1.5
连接池:druid 1.1.14
<!--代码片段-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.14</version>
</dependency>
<dependency>
<groupId>io.shardingjdbc</groupId>
<artifactId>sharding-jdbc-core</artifactId>
<version>2.0.3</version>
</dependency>
异常1:
Cannot find data source in sharding rule, invalid actual data node is: 'order_0.t_order_0'
原因:数据库连接名和交给shardingjdbc管理的连接名不匹配不匹配.
解决方式:
/**
* 配置数据源0,数据源的名称最好要有一定的规则,方便配置分库的计算规则
*
* @return
*/
@Bean(name = "dataSource0")
@ConfigurationProperties(prefix = "spring.datasource.test1")
public DataSource dataSource0() {
return DataSourceBuilder.create().build();
}
/**
* 配置数据源1,数据源的名称最好要有一定的规则,方便配置分库的计算规则
*
* @return
*/
@Bean(name = "dataSource1")
@ConfigurationProperties(prefix = "spring.datasource.test2")
public DataSource dataSource1() {
return DataSourceBuilder.create().build();
}
/**
* 配置数据源规则,即将多个数据源交给sharding-jdbc管理,并且可以设置默认的数据源,
* 当表没有配置分库规则时会使用默认的数据源
*
* @return
*/
public Map<String, DataSource> createDataSourceMap() {
//设置分库映射
Map<String, DataSource> dataSourceMap = new HashMap<>();
dataSourceMap.put("order_0", dataSource0());
dataSourceMap.put("order_1", dataSource1());
return dataSourceMap;
}
/**
* 设置表的node
*
* @return
*/
@Bean
TableRuleConfiguration getUserTableRuleConfiguration() {
TableRuleConfiguration orderTableRuleConfig = new TableRuleConfiguration();
orderTableRuleConfig.setLogicTable("t_order");
orderTableRuleConfig.setActualDataNodes("order_${0..1}.t_order_${0..1}");
orderTableRuleConfig.setKeyGeneratorColumnName("user_id");
return orderTableRuleConfig;
}
/**
* 配置分库分表策略
*
* @return
* @throws SQLException
*/
@Bean(name = "shardingDataSource")
DataSource getShardingDataSource() throws SQLException {
ShardingRuleConfiguration shardingRuleConfig;
shardingRuleConfig = new ShardingRuleConfiguration();
shardingRuleConfig.getTableRuleConfigs().add(getUserTableRuleConfiguration());
shardingRuleConfig.getBindingTableGroups().add("t_order");
shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(new StandardShardingStrategyConfiguration("order_id", DemoDatabaseShardingAlgorithm.class.getName()));
shardingRuleConfig.setDefaultTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("user_id", DemoTableShardingAlgorithm.class.getName()));
ShardingRule build = shardingRuleConfig.build(createDataSourceMap());
return new ShardingDataSource(build);
}
这两处标记的地方要一直.因为在第一处标记的地方我们把数据源给了shardingjdbc进行管理,所以我们在给表进行jdbc设置分表规则时,也应该是拿在sharding中数据源的名字.