JAVA學習之路---mysql讀寫分離
1.mysql讀寫分離,我們需要在資料來源配置檔案中配置多個數據源
2.自定義動態切換資料來源DynamicDataSource,繼承AbstractRoutingDataSource,該類有實現了DataSource介面
然後我們開啟DynamicDataSource繼承的AbstractRoutingDataSource
如上圖所示我們在圖1中設定了targetDataSources目標資料來源和defaultTargetDataSource預設資料來源
如上圖所示可以看到,拿到targetDataSources,然後遍歷targetDataSources放入到resolvedDataSources(在圖2中也標識出來了),如果我們設定了預設的資料來源,賦值給resolvedDefaultDataSource
該類中兩個getConnection方法都呼叫了determineTargetDataSource()方法,接下里我們看看determineTargetDataSource()
從上圖我們可以看出,獲取connection之前我們首先要獲取key,然後通過key找到我們對應的資料來源物件,如果找到不資料來源物件,那麼就使用預設的資料來源。
重寫該方法,然後返回資料來源對應的key,在圖1中定義的key有
我們可以定義一個切面,用來處理業務層的方法,如果不是get、find、select、search等開頭的我們應該把master作為key可以設定在ThreadLocal中,然後在連線資料庫的時候,會走我們自定義DynamicDataSource中重寫的determineCurrentLookupKey()方法,該方法從ThreadLocal中獲取在切面中放入的key,通過key就可以找到我們需要的資料來源物件了。
就可以實現的讀寫分離操作了。