1. 程式人生 > >SpringBoot學習筆記之動態資料來源切換

SpringBoot學習筆記之動態資料來源切換

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