tddl是阿里的分庫分表中間件,系統架構上文描述的很清楚,本文主要整理下個人看tddl源碼時認為有意義的東西
如上文所述,tddl分為三大主要模塊,matrix、group、atom
1.atom模塊
atom模塊是最底層的模塊,主要實現tddl的動態數據源配置以及提供基於java.sql.DataSource的實現,但這兩部分的事都不是它做的,atom僅是將動態配置以及數據源實現作一個聚合,Diamond提供基本的動態配置,基於注冊監聽機制實現數據源配置的動態刷新,atom內部定的接口如:DbConfManager,注冊全局配置監聽public void registerGlobaDbConfListener(ConfigDataListener Listener)和注冊應用配置監聽public void registerAppDbConfListener(ConfigDataListener Listener) 來監控dataId的變化
數據源的提供,atom采用 原子的數據源分離的JBOSS數據源(直接將jboss的源碼擼出來貼進去了),具體見類:WrapperDataSource
atom定義了自己的基於java.sql.DataSource的數據源實現(AbstractTAtomDataSource),在java數據源接口的基礎之上定義了自己的個方法,因為atom要實現動態數據源,所以必須要擴展java.sql.DataSource的接口才可以,主要定義了如下幾個方法:
//返回原子的jobss數據源實現
protected abstract DataSource getDataSource() throws SQLException;
//初始化方法,主要是解析diamond中的全局配置和app配置,拿到數據源配置信息等,具體的配置參見上文:tddl的原理分析
public abstract void init() throws Exception;
//刷新數據源
public abstract void flushDataSource();
//銷毀數據源
public abstract void destroyDataSource() throws Exception;