主要类以及功能分析:
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方法创建连接池