在构建多数据源的时候,以dynamic-datasource-spring-boot-starter
组件为例,其需要将ShardingSphere-JDBC
的内部数据源放入dynamic-datasource-spring-boot-starter
的数据源内托管. 而在4.1.1
版本,ShardingSphere-JDBC
有四种功能不同的数据源名字, 各为
* shardingjdbc有四种数据源,需要根据业务注入不同的数据源
*
* <p>1. 未使用分片, 脱敏的名称(默认): shardingDataSource;
* <p>2. 主从数据源: masterSlaveDataSource;
* <p>3. 脱敏数据源:encryptDataSource;
* <p>4. 影子数据源:shadowDataSource;
*
此四个数据源名字我从 踩坑sharding jdbc,集成多数据源 - 知乎 (zhihu.com) 得知.
而在SharingSphere-JDBC 5.0.0
版本,数据源的名字已经更改.我并没有在shardingsphere doc
看到其介绍,是否有朋友能给出其数据源Bean的名字清单?shardingsphere doc
仅给出注入数据源的方法,没有提及数据源的具体Bean Java Class.
我目前只得知其中一个改名的数据源名字,其他尚不清楚.
下为数据源配置类的示例文件
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import com.baomidou.dynamic.datasource.provider.AbstractDataSourceProvider;
import com.baomidou.dynamic.datasource.provider.DynamicDataSourceProvider;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import javax.annotation.Resource;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
@Configuration
public class MyDataSourceConfiguration {
private static final String SHARDING_DATA_SOURCE_NAME = "gits_sharding";
@Resource
private DynamicDataSourceProperties properties;
@Resource(name = "shardingSphereDataSource")
private DataSource shardingDataSource;
@Resource(name = "shardingDataSource")
private DataSource oldShardingDataSource;
@Resource(name = "masterSlaveDataSource")
private DataSource masterSlaveDataSource;
@Resource(name = "encryptDataSource")
private DataSource encryptDataSource;
@Resource(name = "shadowDataSource")
private DataSource shadowDataSource;
@Bean
public DynamicDataSourceProvider dynamicDataSourceProvider() {
return new AbstractDataSourceProvider() {
@Override
public Map<String, DataSource> loadDataSources() {
Map<String, DataSource> dataSourceMap = new HashMap<>();
dataSourceMap.put(SHARDING_DATA_SOURCE_NAME, shardingDataSource);
return dataSourceMap;
}
};
}
@Primary
@Bean
public DataSource dataSource() {
DynamicRoutingDataSource dataSource = new DynamicRoutingDataSource();
dataSource.setPrimary(properties.getPrimary());
dataSource.setStrict(properties.getStrict());
dataSource.setStrategy(properties.getStrategy());
dataSource.setP6spy(properties.getP6spy());
dataSource.setSeata(properties.getSeata());
return dataSource;
}
}
下为ShardingSphere-JDBC4.1.1
与dynamic-datasource-spring-boot-starter
整合的代码示例,方便解释为什么通过dynamic-datasource-spring-boot-starter
构建的多数据源需要有数据源Bean的名字:
dynamic-datasource-samples/third-part-samples/sharding-jdbc-sample at master · dynamic-datasource/dynamic-datasource-samples (github.com)