1. 程式人生 > >JAVA學習之路---mysql讀寫分離

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就可以找到我們需要的資料來源物件了。

就可以實現的讀寫分離操作了。