• dal configure 源码分析


    主要类以及功能分析:

    dalclientfactory:

      缓存dalconfigure,是初始化入口类
      dalconfigloader(ctripdalconfig)

        加载dal主配置文件,优先从本地加载,本地没有从qconfig加载
      dalconfigurefactory

        通过dal主配置,加载其他dal配置以及构建内存配置对象。load方法加载静态配置,warmup方法根据静态配置创建连接池

      dalconnectionlocator

        作用类似于连接工厂,用于获取连接用,目前只有defaultdalconnectionlocator实现类,可以在dal.config配置文件中指定其他实现,类中主要属性为datasourcelocator和configprovider,datasourcelocator作用为创建datasource所用,类似于datasource的工厂,configureprovider为获取配置用。

      datasourcelocator

        获取datasource,依赖integratedconfigprovider获取配置,作用类似于数据源工厂,产出datasource,且会在cache中缓存已经创建的datasource;根据datasourceidentity创建两种不同datasource,clusterdatasourceidentity创建clusterdynamicdatasource,其他创建forceswitchabledatasource;

      refreshabledatasource

        是forceswitchabledatasource的父类,主要实现了singledatasourcewrapper/datasource/datasourcechangeurechangelistener接口,定位为可刷新的单个datasource。可刷新功能实现为继承datasourceconfigurechangelistener,当有配置变更会通过configchanged方法通知到该类,并在event中获取到新的配置信息,并使用新的配置信息创建新的datasource,最后替换内存中缓存的老的datasouce,然后把老的datasource关闭掉。依赖于datasourcecreator创建底层datasource,三种场景普通创建、配置变更创建、强制刷新分别调用datasourcecreator的getorcreatedatasource/getorcreatedatasourcewithoutpool/getorasynccreatedatasourcewithpool,维护数据源变更要触发的触发器列表,当获取连接时判断服务器是否变化以及提交执行触发器的异步任务。
      datasourcecreator
        负责创建所有的singledatasource,以及会在内存中缓存创建完成的datasource,并且维护异步创建连接池的线程池
      forceswitchabledatasource

        继承自refreshabledatasource,提供通过ip和端口强制刷新的功能,与Idataconfigureprovider关联,所以该类要实现从Idataconfigureprovider向datasourceconfigure的转换才能使用父类的功能,且该类中支持添加强制刷新的监听器,主要使用父类的异步创建功能,先创建datasource,然后在异步线程中创建线程池
      clusterdynamicdatasource
        功能与refreshabledatasouce类似,主要使用了代理模式,基本功能都是代理底层datasource做,根据集群类型创建不同的底层datasource,如果集群类型为MGR则创建clusterdatasource,否则创建refreshabledatasouce
      singledatasource
        提供创建底层daltomcatdatasource,以及创建连接池接口
      daltomcatdatasource
        继承自tomcat jdbc的datasourcefactory,重写了获取连接池的方法,替换为dal实现的dalconnectionpool,而不是tomcat jdbc自己的connectpool
      dalconnectionpool
        继承自tomcat jdbc的Connectionpool,主要功能提供了连接监听器,相关计数,以及设置session timeout属性,其他主体功能直接转调父类。
      integeredconfigprovider
        主要获取datasourceconfig、clusterconfig、clusterinfo,目前主要使用titankeyprovider,获取datasourceconfig主要委托给datasourceconfigurelocator;获取集群信息委托给clusterinfoprovider;获取集群配置委托给clusterconfigprovider
      datasourceconfiguremanager

      datasourceconfigure设置过程:datasourceconfiguremanager通过integerddataconfigureprovider获取到dal.config里配置的db信息,然后委托poolpropertiesProvider获取datasource.properties配置,委托connectionStringprovider通过db名从titan的qconfig里获取连接串信息,包括ip、用户名、密码之类,最后给获取到的datasource.properties内容和db连接串内容设置到defaultdatasourceconfigurelocator中。最后供titanprovider使用。warmupConnection:通过dalconfigure.getconnect方法创建连接池

  • 相关阅读:
    ECharts
    JavaScript实现数组去重方法
    面试题1
    Vue中的8种组件通信方式
    渐进式web应用 (PWA)
    单元测试(Jest 和 Mocha)
    axios
    Vue Router
    Vuex
    hash 模式与 history 模式小记
  • 原文地址:https://www.cnblogs.com/caiyao/p/14872702.html
Copyright © 2020-2023  润新知