[zebra源码]SingleDataSource构建和初始化
SingleDataSource 对应 GroupDataSource 主库节点 或一个从库节点
由于它是对应的是实际的db节点,直接和底层数据库连接池打交道; zebra 将它的生命周期交由 SingleDataSourceManager 进行管理,负责构建、启停、销毁, 销毁的过程是异步的,先将其塞到阻塞队列 BlockingQueue<SingleDataSource> toBeClosedDataSource
中,有一个监控线程每隔100ms从队列中取出待关闭的ds 关闭之 (这个或许有助于配置变更时加快 GroupDataSource 的重建)
SingleDataSource的构建和初始化
SingleDataSourceManager#createDataSource()
-> initDataSourceWithFilters()
-> initDataSourceOrigin()
(1) 构建SingleDataSource对象: SingleDataSourceManager#createDataSource()
// internal use only
public SingleDataSource(DataSourceConfig config, List<JdbcFilter> filters) {
this.datasourceId = config.getId();
this.config = config;
this.punisher = new CountPunisher(this, config.getTimeWindow(), config.getPunishLimit());
this.filters = filters;
this.poolType = config.getType();
// 懒加载
this.lazyInit = config.isLazyInit();
this.withDefalutValue = true;
this.forceClose = false;
// 根据配置构建对应的底层数据库连接池
this.dataSourcePool = DataSourcePoolFactory.buildDataSourcePool(config);
initDataSourceWithFilters(config);
}
this.poolType: 连接池类型,如 hikaricp、druid
this.lazyInit: 是否惰性初始化,默认是true, 底层连接池真正初始化的时候 会直接初始化 initialSize个物理连接,过程较慢, 如果为false 那么会影响应用启动时间
this.dataSourcePool: 对底层连接池的包装类, 根据 poolType 初始化对应的类型
DataSourcePool 的定义
DataSourcePool 实现类则对应各种连接池,命名规则为 xxDataSourcePool
以目前最快的连接池 hikariCP为例,适配类为 HikariDataSourcePool, #build() 返回 HikariDataSource 对象
(2) 初始化 initDataSourceWithFilters() -> initDataSourceOrigin()
initDataSourceWithFilters()
看名字,依旧是先执行以下自定义的 jdbcFilter 当前生命周期的过滤器方法 jdbcFilter#initDataSourceOrigin()
(3) initDataSourceOrigin() 初始化底层连接池
- DataSource result = this.dataSourcePool.build(value, withDefalutValue); 构建底层连接池对象, 如hikariCp的 HikariCPDataSource、 druid的DruidDataSource
- 初始化连接 如果非惰性初始化 this.lazyInit = false(默认是true) 的话才调用 getConnection() 让底层连接池进行初始化, 否则的话不执行;
底层连接池一般是在第一次获取连接的时候,进行初始化操作 如一次性初始化 initialSize 个物理连接,这个过程比较慢,不建议设为false
SindleDataSource#close()
当SingleDataSource#close 的时候,会一起关闭内部的 DataSourcePool 进而把底层的 连接池给关闭了
完整目录:数据库中间件zebra源码分析
本文来自博客园,作者:mushishi,转载请注明原文链接:https://www.cnblogs.com/mushishi/p/15022079.html