如何懒启动数据源
huayanYu opened this issue · comments
beecp做的不错,我的多数据源项目开始做beecp的集成,遇到了问题,不知道如何懒启动。
baomidou/dynamic-datasource@a630e21
开始尝试过注释掉的代码,调用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;
}
另外: 我觉得你这边做纯粹一点吧,动态数据源就不再继续造轮子了。 我们可以深度合作,尤其是在多数据源下的监控。
感谢您对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是一个辅助性应用项目,未来不会做大的升级改造了。
@Chris2018998 一个一个去设置啊。。。。因为我已经把BeeDataSourceConfig 构建出来了, 有没有一个方法相当于setConfig这种也。 - -实在没有也只有一个一个设置了。
BeeDataSourceConfig下有个loadFromProperties方法看能否参考一下
另外 BeeCP-Starter下也有一些数据源的构造工厂,依据属性列表提取并注入。
已集成并发布。