SpringBoot學習筆記之動態資料來源切換
阿新 • • 發佈:2019-01-26
Springboot 動態資料來源切換
1)、配置檔案application.properties
# 更多資料來源
custom.datasource.names=ds1,ds2
custom.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver custom.datasource.ds1.url=jdbc:mysql://localhost:3306/ds1
custom.datasource.ds1.username=root
custom.datasource.ds1.password=123456
custom.datasource.ds2.driver-class-name=com.mysql.jdbc.Driver custom.datasource.ds2.url=jdbc:mysql://localhost:3306/ds2
custom.datasource.ds2.username=root
custom.datasource.ds2.password=123456
2)、配置檔案中加上配置
#mybatis配置
mybatis.typeAliasesPackage=com.vk.liyj
#匹配mapper下的所有mapper.xml
#mybatis.mapperLocations=classpath:com/vk/liyj/mapper/*Mapper.xml
#匹配指定包下的所有mapper.xml
mybatis.mapperLocations=classpath*:com/vk/liyj/**/*Mapper.xml
3)、動態資料來源切換相關程式碼在dynamicDataSource包下
TargetDataSource為我們自定義的annotation。
DynamicDataSourceRegister類為資料來源動態切換的核心類。該類實現了ImportBeanDefinitionRegistrar和EnvironmentAware這兩個介面,這兩個介面在系統啟動時被分別呼叫。這兩個介面的執行是有先後順序的,EnvironmentAware介面的setEnvironment方法會先被執行完成預設資料來源和自定義資料來源的初始化,然後再執行ImportBeanDefinitionRegistrar介面的registerBeanDefinitions方法完成預設資料來源和目標資料來源的註冊。
DynamicDataSourceContextHolder類中使用了ThreadLocal來儲存當前執行緒使用的資料來源,當前執行緒id是key,value是資料來源名稱。dataSourceIds用於儲存系統配置的資料來源名稱。
DynamicDataSourceAspect是AOP類,主要完成前置和後置功能加強。該類中有兩個要注意的地方,@Aspect必須引用,表示這是一個AOP類,@Order(-1)表示該類要被AOP鏈式呼叫時優先被執行。
DynamicDataSource類繼承了AbstractRoutingDataSource類,在執行service方法呼叫之前被呼叫該方法獲取資料來源。
4)、在SpringBootSampleApplication中啟動類註冊動態資料來源
//註冊動態多資料來源
@Import({DynamicDataSourceRegister.class})
//啟註解事務管理,等同於xml配置方式的 <tx:annotation-driven />
@EnableTransactionManagement
5)、在需要切換資料來源的地方增加TargetDataSource註解,ds2就是我們配置在properties中的名字。Transactional表示該方法使用事務控制。
@Transactional
@TargetDataSource(name = "ds2")
5)、匯入ds1,ds2資料庫指令碼
6)、SpringBootTest 中的testDS1(),testDS2(),testDefaultDS(),testDefaultDSAdd()進行測試。
原始碼下載地址:http://download.csdn.net/download/liyuejin/9986140