首先导入下方依赖开启多数据源配置

<!-- 动态数据源 -->
<dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
     <version>2.5.4</version>
</dependency>

PS: 连接mysql需要导入mysql依赖 

PS: 连接sqlserver需要导入sqlserver依赖 

PS: 连接oracle需要导入oracle依赖 

(下边供上三个的依赖)

<!--  mysql依赖  -->
<dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>6.0.6</version>
</dependency>



<!--  sqlserver依赖-->
<dependency>
	 <groupId>com.microsoft.sqlserver</groupId>
	 <artifactId>sqljdbc4</artifactId>
	 <version>4.0</version>
	 <scope>runtime</scope>
</dependency>


<!-- oracle依赖 -->  
<dependency>  
    <groupId>com.oracle</groupId>  
    <artifactId>ojdbc6</artifactId>  
    <version>10.2.0.1.0</version>  
</dependency> 

 想要连上数据库光有上边的可不行,还得有数据库连接池依赖

<!--  druid连接池  -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.18</version>
</dependency>

 yml里的多数据源配置

spring:
  servlet:
    multipart:
      enabled: true #是否启用http上传处理
      max-request-size: 100MB #最大请求文件的大小
      max-file-size: 100MB #设置单个文件最大长度
      file-size-threshold: 20MB #当文件达到多少时进行磁盘写入
  datasource:
    druid:
      stat-view-servlet:
        enabled: true
        loginUsername: admin
        loginPassword: 123456
        allow:
      web-stat-filter:
        enabled: true
    dynamic:
      druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)
        # 连接池的配置信息
        # 初始化大小,最小,最大
        initial-size: 5
        min-idle: 5
        maxActive: 20
        # 配置获取连接等待超时的时间
        maxWait: 60000
        # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
        timeBetweenEvictionRunsMillis: 60000
        # 配置一个连接在池中最小生存的时间,单位是毫秒
        minEvictableIdleTimeMillis: 300000
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        #validationQuery: SELECT 1
        # 打开PSCache,并且指定每个连接上PSCache的大小
        poolPreparedStatements: true
        maxPoolPreparedStatementPerConnectionSize: 20
        # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
        filters: stat,slf4j
        # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
        connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
      datasource:
        master: #可以理解为数据源名称
          url: jdbc:mysql://ip:端口/数据库?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
          username: 账号
          password: 密码
          driver-class-name: com.mysql.jdbc.Driver
        # 多数据源配置 sqlServer
        sqlserver:
          url: jdbc:sqlserver://ip:端口;SelectMethod=cursor;DatabaseName=数据库
          username: 账号
          password: 密码
          driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
        # 多数据源配置
        oracle:
          url: jdbc:oracle:thin:@IP:端口:数据库
          username: 账号
          password: 密码
          driver-class-name: oracle.jdbc.driver.OracleDriver
          validationQuery: SELECT 1 FROM DUAL

下边将介绍如何使用

其实就是一个核心的注解 @DS

PS: 这个注解是最上边动态数据源依赖提供的注解


package com.baomidou.dynamic.datasource.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DS {
    String value();
}

通过他的源码可以看出来 他能作用到方法  接口 和 类上

用法  @DS("数据源名称")

作用到方法上代表该方法所操作的数据源是指定数据源(例子如下)

  @DS("sqlserver")
  List<PoRdrecordVO> getU8One(@Param("id") String id);
//那么我这个mapper操作的数据源就是@DS()内的指定数据源 mapper层对应的xml内不需要指定数据源

作用到类和接口上则表示类和接口内的所有方法操作的数据源都为该数据源

PS:   类和方法上的注解加载顺讯为类和接口-->方法 也就是说 当方法和类上都有注解的时候 以方法上的为准

PS:  不写的时候默认使用master数据源

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐