天天看點

Mysql 讀寫分離的 Java 實作

先上代碼

最後定義切面(Advisor):在 Service 方法執行之前執行:若請求路徑為 get/load/select/fetch 什麼的,則執行 DataSourceHolder.setDataSourceKey("slave") ,否則執行 DataSourceHolder.setDataSourceKey("master") 。如有特殊需要,可以在方法體内手工指定想要使用的資料源。

AbstractRoutingDataSource 原理:

DynamicDataSource 在 getConnection() 時,會根據其 determineCurrentLookupKey() 傳回的結果( "master" 或 "slave" ),去 Spring 配置檔案裡面查找對應的 targetDataSource 是 "data_source_master" 還是 "data_source_slave" ,然後建立其連接配接。