總體思路如下:
-
使用AOP
使用AOP代理對service方法攔截。可以定義一個切面(aspect),包含切點(diǎn)(pointcut)和增強(qiáng)(advice)。 -
數(shù)據(jù)源信息值為多少?放在那里?
數(shù)據(jù)源的信息根據(jù)訪問的service的名字得出,僅有查詢使用slave數(shù)據(jù)源,否則使用master數(shù)據(jù)源。數(shù)據(jù)源的信息設(shè)置在ThreadLocal變量中。 -
數(shù)據(jù)源如何路由
實(shí)現(xiàn)AbstractRoutingDataSource中determineCurrentLookupKey進(jìn)行數(shù)據(jù)源選擇。
具體細(xì)節(jié)這篇文章寫得很清楚了,就不再贅述了。
當(dāng)然還需要對數(shù)據(jù)庫進(jìn)行MySQL主從復(fù)制(BinaryLog)