如果你要使用Mybatis-plus的多数据源功能,首先要引入以下依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.5.4</version>
</dependency>
如果你要使用Druid,要引入:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
在这里我们使用MySQL数据库,引入驱动:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>5.1.6</scope>
</dependency>
我们在application.yml文件里进行多数据源配置:
spring:
datasource:
dynamic:
primary: master
datasource:
master:
url: jdbc:mysql://xx:3306/DD.contract
username:
password:
driver-class-name: com.mysql.jdbc.Driver
slave:
url: jdbc:mysql://:3306/ctpc
username:
password:
driver-class-name: com.mysql.jdbc.Driver
druid:
keep-alive: true
其中的primary属性表明了我们要以下面哪一个数据库为主,主数据库在不进行 @DS切换的时候默认使用。
然后你启动就会发现,提示你根本没有配置数据库!
这应该是因为Druid的自动配置识别不到以上配置。于是我们选择关闭Druid的自动配置。
@SpringBootApplication(
scanBasePackages ={"com.ynunicom.dc.dingdingcontractapp"},
exclude = DruidDataSourceAutoConfigure.class
)
public class DingdingContractAppApplication {
public static void main(String[] args) {
SpringApplication.run(DingdingContractAppApplication.class, args);
}
}
我们把DruidDataSourceAutoConfigure.class给排除在外,我们刚刚引入的dynamic-datasource-spring-boot-starter里面所携带的DynamicDataSourceAutoConfiguration就生效了,它里面有这个东西:
如果你不把Druid的自动配置关闭,则这个东西会被Druid的dataSource给覆盖,以下是Druid的自动配置类DruidDataSourceAutoConfigure中的内容:
去除Druid的自动配置后,服务就可以正常跑起来了。