1,引入依赖
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-core</artifactId>
<version>2.0.3</version>
</dependency>
2,配置数据源
取消springboot自动配置的数据源:删除application.yml里的spring.datasource节点、@EnableJpaRepositories等默认配置。
新增sharding.jdbc.datasource配置:
sharding:
jdbc:
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/demo
username: root
password: 123456
3,新建sharding-jdbc数据源
@Configuration
public class DataSourceConfig {
/**
* 生成分表的数据源
* @return
* @throws SQLException
*/
@Bean("shardingDataSource")
public DataSource buildShardingDataSource() throws SQLException {
ShardingRuleConfiguration shardingRuleConfig;
shardingRuleConfig = new ShardingRuleConfiguration();
shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration());
shardingRuleConfig.getBindingTableGroups().add("wc_order");
shardingRuleConfig.setDefaultTableShardingStrategyConfig(
new StandardShardingStrategyConfiguration(
"created_time",
TableShardingAlgorithm.class.getName(), TableShardingAlgorithm.class.getName()));
return new ShardingDataSource(shardingRuleConfig.build(createDataSourceMap()));
}
private Map<String, DataSource> createDataSourceMap() {
Map<String, DataSource> result = new HashMap<>();
result.put("ds_0", createDataSource());
return result;
}
/**
* 设置表的node
* @return
*/
@Bean
TableRuleConfiguration getOrderTableRuleConfiguration() {
TableRuleConfiguration orderTableRuleConfig = new TableRuleConfiguration();
orderTableRuleConfig.setLogicTable("wc_order");
orderTableRuleConfig.setActualDataNodes("ds_0.wc_order_2018, ds_0.wc_order_2019");
return orderTableRuleConfig;
}
@Bean
@Primary
@ConfigurationProperties("sharding.jdbc.datasource")
public DataSo