Chris2018998 / beecp

A small JDBC Connection pool
Apache License 2.0
88 stars 18 forks source link

如何懒启动数据源 #42

Closed huayanYu closed 3 years ago

huayanYu commented 3 years ago

beecp做的不错,我的多数据源项目开始做beecp的集成,遇到了问题,不知道如何懒启动。

https://github.com/baomidou/dynamic-datasource-spring-boot-starter/commit/a630e21c70cc6a6ba7fe408974fafd2d56c3db82

开始尝试过注释掉的代码,调用copyTo就不用Init了, 但是copyTo似乎和我理解的不一样, 使用后所有参数null了。还有其他办法么?

    public DataSource createDataSource(DataSourceProperty dataSourceProperty) {
        BeeDataSourceConfig config = dataSourceProperty.getBee().toBeeCpConfig(beeCpConfig);
        config.setUsername(dataSourceProperty.getUsername());
        config.setPassword(dataSourceProperty.getPassword());
        config.setJdbcUrl(dataSourceProperty.getUrl());
        config.setPoolName(dataSourceProperty.getPoolName());
        String driverClassName = dataSourceProperty.getDriverClassName();
        if (!StringUtils.isEmpty(driverClassName)) {
            config.setDriverClassName(driverClassName);
        }
        if (!dataSourceProperty.getLazy()) {
            return new BeeDataSource(config);
        } else {
            log.warn("beecp current not support lazy init");
            return new BeeDataSource(config);
        }
//        BeeDataSource beeDataSource = new BeeDataSource();
//        try {
//            Method copyToMethod = BeeDataSourceConfig.class.getDeclaredMethod("copyTo", BeeDataSourceConfig.class);
//            copyToMethod.setAccessible(true);
//            copyToMethod.invoke(beeDataSource, config);
//        } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
//            e.printStackTrace();
//        }
//        return beeDataSource;
    }

另外: 我觉得你这边做纯粹一点吧,动态数据源就不再继续造轮子了。 我们可以深度合作,尤其是在多数据源下的监控。

Chris2018998 commented 3 years ago

感谢您对BeeCP的支持。

BeeCP支持懒加载的方式(第一次getConnection()方法时执行), 配置可以参考下面的代码

BeeDataSource ds= new  BeeDataSource ();
ds.setUsername(dataSourceProperty.getUsername());
ds.setPassword(dataSourceProperty.getPassword());
ds.setJdbcUrl(dataSourceProperty.getUrl());
ds.setPoolName(dataSourceProperty.getPoolName());
............................

建议对于属性注入建议依单(提取配置对象的方法名,属性名之类的)动态配置,即便后续增加新的配置字段,也可兼容

BeeCP-Starter是一个辅助性应用项目,未来不会做大的升级改造了。

huayanYu commented 3 years ago

@Chris2018998 一个一个去设置啊。。。。因为我已经把BeeDataSourceConfig 构建出来了, 有没有一个方法相当于setConfig这种也。 - -实在没有也只有一个一个设置了。

Chris2018998 commented 3 years ago

BeeDataSourceConfig下有个loadFromProperties方法看能否参考一下

另外 BeeCP-Starter下也有一些数据源的构造工厂,依据属性列表提取并注入。

huayanYu commented 3 years ago

已集成并发布。