1、导入Maven依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.2.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.18</version>
</dependency>
2、启动类配置
添加@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
3、使用@DS注解
1、@DS 可以注解在方法上或类上,同时存在就近原则 方法上注解 优先于 类上注解。
2、不能使用事务,否则数据源不会切换,使用的还是第一次加载的数据源;
@DS("master")
master:自己在配置中定义的数据源名称,可以放在Service层或者Repository层及具体方法里。
4、application.yml 具体配置
#############################正式环境#############################
spring:
datasource:
dynamic:
primary: master #设置默认的数据源或者数据源组,默认值即为master
strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
datasource:
master:
url: jdbc:oracle:thin:@x.x.x.x:1522/lkm1
password: lkm1
username: lkm1
driver-class-name: oracle.jdbc.OracleDriver
second:
driver-class-name: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@x.x.x.x:1521/lkm2
password: lkm2
username: lkm2
third:
driver-class-name: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@x.x.x.x:1521/lkm3
password: lkm3
username: lkm3
5、application.properties具体配置
#正式数据库
spring.datasource.dynamic.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.dynamic.datasource.master.url=jdbc:mysql://x.x.x.x:3306/lkm1?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8
spring.datasource.dynamic.datasource.master.username=lkm1
spring.datasource.dynamic.datasource.master.password=lkm1
# 声明默认的主数据源(不配置的话,默认查找master标识的数据源,也可改为其他数据源标识)
spring.datasource.dynamic.primary=master
# 其他数据源(使用时需要使用`@DS("second")`注解声明使用的数据库)
spring.datasource.dynamic.datasource.second.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.dynamic.datasource.second.url=jdbc:oracle:thin:@x.x.x.x:1523/lkm
spring.datasource.dynamic.datasource.second.username=lkm2
spring.datasource.dynamic.datasource.second.password=lkm2