代碼基於 SpringBoot + SpringDataJDBC + Mybatis 架構
介紹使用多數據源的關鍵的一些類:AbstractRoutingDataSource繼承實現determineCurrentLookupKey方法,此方法主要返回AbstractRoutingDataSource抽象類的多數據源的Key值
提醒:這里主要提醒一下,Spring Aop(AspectJ實現)的攔截方法,@Before@After注解之類的方法的參數可以具有一個 org.aspectj.lang.JoinPoint 類型的形參,而@Around類需要是ProceedingJoinPoint此形參,不要混用(官方說明來源:https://docs.spring.io/spring/docs/5.2.6.RELEASE/spring-framework-reference/core.html#aop-ataspectj-advice-params)
首先展示下配置文件:application.yml
spring: datasource: one: username: root password: root jdbc-url: jdbc:mariadb://localhost:3306/myschool driver-class-name: org.mariadb.jdbc.Driver two: username: root password: root jdbc-url: jdbc:mariadb://localhost:3306/myschool driver-class-name: org.mariadb.jdbc.Driver
配置多個數據源:
@Bean(value = "db1")
@ConfigurationProperties(prefix = "spring.datasource.one")
public HikariDataSource dataSource() {
HikariDataSource dataSource = new HikariDataSource();
return dataSource;
}
@Bean(value = "db2")
@ConfigurationProperties(prefix = "spring.datasource.two")
public HikariDataSource dataSource2() {
HikariDataSource dataSource = new HikariDataSource();
return dataSource;
}
下面是多數據源的配置:
動態數據源實現如下:
獲取數據源的目標位置:DataSourceTransactionManager類的doBegin方法
具體可以下載Demo試試:https://github.com/starSmallDream/MySpringDataJdbcAndMybatisByManyDataSource.git