多数据源
mybatis-plus官网
dynamic-datasource
一、pom.xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.3.2</version>
</dependency>
二、yml配置
可不指定用户名密码
spring:
datasource:
dynamic:
druid:
initial-size: 10
max-active: 10
min-idle: 10
max-wait: 6000
primary: master #设置默认的数据源或者数据源组,默认值即为master
datasource:
master:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://xx/xx?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8&allowMultiQueries=true&useAffectedRows=true
username: xx
password: xx
impala:
url: jdbc:impala://xx/dim_gsdyf
driverClassName: com.cloudera.impala.jdbc41.Driver
druid:
filters: ''
gsdyf:
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@xx:xx
username: xx
password: xx
druid:
initialSize: 5
maxActive: 10
minIdle: 10
max-wait: 10000
validation-query: select 1 from dual
三、使用 @DS 切换数据源
@DS 可以注解在方法上或类上,同时存在就近原则 方法上注解 优先于 类上注解。
3.1 配置启动类
DataSourceAutoConfiguration.class会自动查找application.yml或者properties文件里的spring.datasource.*相关属性并配置数据源。
因为我们需要在项目中使用多数据源,手动指定多数据源,所以需要排除自动注入数据源的配置
在SpringBoot启动类加上@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
3.2 测试在不同位置使用@DS注解
3.2.1 在同一个接口的不同方法中
结果报错:Error querying database. Cause: java.sql.SQLSyntaxErrorException: Unknown database ‘dim_test’
已经测试过在不使用@DS时不报错,或者将test1方法中查询改为test方法中的不报错,由此可见查询的还是master数据源
3.2.2 在同一个接口的不同mapper中
可以正常查出结果没有报错
3.2.3 在同一个接口的不同service中