1.将每个数据源的驱动、连接池、url、用户名、密码添加到动态数据源组件中
{
@Resource
private DataSource dataSource;
@Resource
private DefaultDataSourceCreator dataSourceCreator;
写个接口提前添加数据源
添加数据源{
DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;
// 添加数据源信息到核心动态数据源组件
DataSourceProperty dataSourceProperty = new DataSourceProperty();
BeanUtils.copyProperties(dataSourceDTO, dataSourceProperty);
DataSource dataSource = dataSourceCreator.createDataSource(dataSourceProperty);
ds.addDataSource(name, dataSource);
}
}
2.动态的切换数据源
{
try{
// 切换数据源
DynamicDataSourceContextHolder.push(selectCondition.getDataSourceName());
// 获取当前数据源名称
log.info("当前切换的数据源名称:{}",DynamicDataSourceContextHolder.peek());
jsonObjects = baseDataMapper.querySelect(selectCondition);
}catch (Exception e){
e.printStackTrace();
}finally {
// 移除数据源
DynamicDataSourceContextHolder.poll();
return jsonObjects;
}
}
也可使用简单的方式,在代码写死,直接使用注解。
spring:
datasource:
dynamic:
primary: master #设置默认的数据源或者数据源组,默认值即为master
strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
datasource:
master:
url: jdbc:mysql://192.168.211.253:3306/test1
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
slave_1:
url: jdbc:mysql://192.168.211.253:3306/test2
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
#......省略
#以上会配置一个默认库master,一个组slave下有两个子库slave_1
用注解的形式切换数据源
@DS("slave_1")