數(shù)據(jù)庫讀寫分離方案
一、通過MyBatis配置文件
通過MyBatis配置文件創(chuàng)建讀寫分離兩個(gè)DataSource,每個(gè)SqlSessionFactoryBean對象的mapperLocations屬性制定兩個(gè)讀寫數(shù)據(jù)源的配置文件。將所有讀的操作配置在讀文件中,所有寫的操作配置在寫文件中。
優(yōu)點(diǎn):實(shí)現(xiàn)簡單
缺點(diǎn):維護(hù)麻煩,需要對原有的xml文件進(jìn)行重新修改,不支持多讀,不易擴(kuò)展
二、通過Spring AOP
通過Spring AOP在業(yè)務(wù)層實(shí)現(xiàn)讀寫分離,在DAO層調(diào)用前定義切面,利用Spring的AbstractRoutingDataSource解決多數(shù)據(jù)源的問題,實(shí)現(xiàn)動態(tài)選擇數(shù)據(jù)源
優(yōu)點(diǎn):通過注解的方法在DAO每個(gè)方法上配置數(shù)據(jù)源,原有代碼改動量少,易擴(kuò)展,支持多讀
缺點(diǎn):需要在DAO每個(gè)方法上配置注解,人工管理,容易出錯(cuò)
三、通過Mybatis的Plugin
通過Mybatis的Plugin在業(yè)務(wù)層實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離,在MyBatis創(chuàng)建Statement對象前通過攔截器選擇真正的數(shù)據(jù)源,在攔截器中根據(jù)方法名稱不同(select、update、insert、delete)選擇數(shù)據(jù)源。
優(yōu)點(diǎn):原有代碼不變,支持多讀,易擴(kuò)展
四、通過spring的AbstractRoutingDataSource和mybatis Plugin攔截器
如果你的后臺結(jié)構(gòu)是spring+mybatis,可以通過spring的AbstractRoutingDataSource和mybatis Plugin攔截器實(shí)現(xiàn)非常友好的讀寫分離,原有代碼不需要任何改變。推薦第四種方案
優(yōu)點(diǎn):原有代碼不需要任何改變,支持多讀,易擴(kuò)展