基于配置表方式动态管理多数据源--基于Dynamic-DataSource的扩展

项目需求

项目ORM使用Mybatis-plus,数据源使用Dynamic-datasource。Dynamic-Datasource默认是基于yml配置文件的,但是需求中有许多外部数据源要随时增减,yml配置方式无法满足项目需求,经过翻看源码发现一些扩展点。

  1. com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider 基于这个类扩展可以实现从数据库扩展表中读取配置,生成数据源
    2.通过对 com.baomidou.dynamic.datasource.DynamicRoutingDataSource进行封装可以随时增减数据源。
    封装代码如下:
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty;

import javax.sql.DataSource;

public class DynamicDataSourceManager {
    private final DynamicRoutingDataSource dataSource;
    private final DefaultDataSourceCreator creator;


    public DynamicDataSourceManager(DynamicRoutingDataSource dataSource, DefaultDataSourceCreator creator){
        this.dataSource = dataSource;
        this.creator = creator;
    }



    public void addDataSource(DataSourceProperty dataSourceProperty){
        DataSource dataSource = this.creator.createDataSource(dataSourceProperty);
        this.dataSource.addDataSource(dataSourceProperty.getPoolName(),dataSource);
    }

    public void addDataSource(String poolName,String driverClassName,String url,String username,String password){
        DataSourceProperty dataSourceProperty = new DataSourceProperty();
        dataSourceProperty.setPoolName(poolName);
        dataSourceProperty.setDriverClassName(driverClassName);
        dataSourceProperty.setUrl(url);
        dataSourceProperty.setUsername(username);
        dataSourceProperty.setPassword(password);
        addDataSource(dataSourceProperty);
    }

    public void removeDataSource(String poolName){
        this.dataSource.removeDataSource(poolName);
    }

    public DataSource getDataSource(String poolName){
        return this.dataSource.getDataSource(poolName);
    }


}

需要时在配置文件里注入

  @Bean
    public DynamicDataSourceManager dynamicDataSourceManager(DynamicRoutingDataSource dynamicRoutingDataSource, DefaultDataSourceCreator defaultDataSourceCreator) {
        return new DynamicDataSourceManager(dynamicRoutingDataSource,defaultDataSourceCreator);
    }

调用时

 @Resource
    private DynamicDataSourceManager dynamicDataSourceManager;

以上基本满足了项目需求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值