依赖引入
在maven项目中引入依赖
1.shardingsphere依赖
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-namespace</artifactId>
<version>4.1.1</version>
</dependency>
2.dynamic-datasource
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.1.1</version>
</dependency>
配置文件
按照如下方式分别配置sharding和多数据源
spring:
# shardingjdbc 配置
shardingsphere:
datasource:
names: shardingmaster,shardingslave0,shardingslave1
shardingmaster:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: org.h2.Driver
jdbc-url: jdbc:h2:mem:test
username: sa
password: ""
shardingslave0:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: org.h2.Driver
jdbc-url: jdbc:h2:mem:test
username: sa
password: ""
shardingslave1:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: org.h2.Driver
jdbc-url: jdbc:h2:mem:test
username: sa
password: ""
masterslave:
name: ms
load-balance-algorithm-type: round_robin
master-data-source-name: shardingmaster
slave-data-source-names: shardingslave0,shardingslave1
#sharding: ## 此处配置shading规则,脱敏策略,分表分库策略,主从规则也可放在这里配置
# 动态数据源配置
datasource:
dynamic:
datasource:
master:
username: sa
password: ""
url: jdbc:h2:mem:master ##此处注意,使用hikari数据源,属性也是url,而不是jdbc-url
driver-class-name: org.h2.Driver
schema: db/schema.sql
test:
username: sa
password: ""
url: jdbc:h2:mem:test
driver-class-name: org.h2.Driver
schema: db/schema.sql
代码加载配置
@Configuration
@AutoConfigureBefore({DynamicDataSourceAutoConfiguration.class, SpringBootConfiguration.class})
public class MyDataSourceConfiguration {
@Resource
private DynamicDataSourceProperties properties;
/**
* 未使用分片, 脱敏的名称(默认): shardingDataSource
* shardingjdbc使用了主从: masterSlaveDataSource
* 此处如果主从策略配置在sharding属性下面,需要使用shardingDataSource
*/
@Lazy
@Resource(name = "masterSlaveDataSource")
private DataSource masterSlaveDataSource;
@Bean
public DynamicDataSourceProvider dynamicDataSourceProvider() {
Map<String, DataSourceProperty> datasourceMap = properties.getDatasource();
return new AbstractDataSourceProvider() {
@Override
public Map<String, DataSource> loadDataSources() {
Map<String, DataSource> dataSourceMap = createDataSourceMap(datasourceMap);
dataSourceMap.put("sharding", masterSlaveDataSource);
//打开下面的代码可以把 shardingjdbc 管理的数据源也交给动态数据源管理 (根据自己需要选择开启)
//dataSourceMap.putAll(((MasterSlaveDataSource) masterSlaveDataSource).getDataSourceMap());
return dataSourceMap;
}
};
}
/**
* 将动态数据源设置为首选的
* 当spring存在多个数据源时, 自动注入的是首选的对象
* 设置为主要的数据源之后,就可以支持shardingjdbc原生的配置方式了
*/
@Primary
@Bean
public DataSource dataSource(DynamicDataSourceProvider dynamicDataSourceProvider) {
DynamicRoutingDataSource dataSource = new DynamicRoutingDataSource();
dataSource.setPrimary(properties.getPrimary());
dataSource.setStrict(properties.getStrict());
dataSource.setStrategy(properties.getStrategy());
dataSource.setProvider(dynamicDataSourceProvider);
dataSource.setP6spy(properties.getP6spy());
dataSource.setSeata(properties.getSeata());
return dataSource;
}
}
写在最后
楼主之前找这个教程找了好久,最后是在gitee的https://gitee.com/baomidou/dynamic-datasource-spring-boot-starter
找到了详细教程,针对自己使用过程中存在的一下小细节,这里也做了说明,关于更多连接池类型配置,可以参照dynamic-datasource-spring-boot-starter官方文档进行配置,同时有问题欢迎大家一块讨论。