TDDL DataSource 分爲 AtomDataSource GroupDatasourcemysql
他們二者沒有依賴關係, 都實現了 JDBC 規範, 能夠做爲獨立的 datasource 單獨使用sql
AtomDataSource 負責 diamond 動態配置, 它能夠經過 diamond 動態改變 ds 的 ip port 帳號密碼等app
AtomDataSource diamond 配置分爲三部分atom
1. global config加密
global config 主要配置 database 信息, 主要包括以下配置spa
dataId:com.taobao.tddl.atom.global.qatest_normal_0 group:DEFAULT_GROUP content: ip=127.0.0.1 port=3306 dbName=qatest_normal_0 dbType=mysql dbStatus=RW
2. app config線程
app config 主要包括應用配置, 例如線程池等, 以下code
dataId:com.taobao.tddl.atom.app.tddl_sample.qatest_normal_0 group:DEFAULT_GROUP content: userName=tddl minPoolSize=1 maxPoolSize=2 idleTimeout=10 blockingTimeout=5 preparedStatementCacheSize=15 connectionProperties=characterEncoding=gbk
3. user configorm
dataId:com.taobao.tddl.atom.passwd.qatest_normal_0.mysql.tddl group:DEFAULT_GROUP content: encPasswd=xxxxxxx(密文,請用tddl-atom-datasource工程下的JbossPasswordDecode加密下明文密碼)
Diamond 動態配置代碼結構blog
GroupDatasource 負責組合多個 datasource, 主要負責雙機熱備, 讀寫分離, 其中使用了 DatasourceWrapper 包裝 ds, DataSourceWrapper 有一個 Weight 屬性, 能夠設置單個 ds 的可讀可寫屬性, 以及讀寫優先級. 最後將多個 ds 組合成讀寫分離 ds, 實例代碼
List<DataSourceWrapper> dataSourceWrappers = new ArrayList<DataSourceWrapper>(); dataSourceWrappers.add(new DataSourceWrapper("127.0.0.1:3306:db_1", "rpwp", getMySQLDataSource(1), DBType.MYSQL)); dataSourceWrappers.add(new DataSourceWrapper("127.0.0.1:3306:db_2", "rpw0p0", getMySQLDataSource(2), DBType.MYSQL)); TGroupDataSource ds = new TGroupDataSource(); ds.init(dataSourceWrappers);