SpringBoot实现多数据源配置详解

开发环境:JDK1.8+SpringBoot2.4.12+Oracle

这里我们假设要使用两个数据源分别为:master和slave。

  • pom.xml 依赖包


    org.springframework.boot
    spring-boot-starter

    org.springframework.boot
    spring-boot-starter-web

    org.springframework.boot
    spring-boot-starter-data-jpa

    com.github.noraui
    ojdbc7
    12.1.0.2

    org.apache.commons
    commons-lang3

    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    1.1.1

  • application.yml配置
server:
  port: 50000 
---
spring:
  jpa: 
    hibernate:  
      ddlAuto: update
    openInView: true
    showSql: false
    databasePlatform: org.hibernate.dialect.Oracle10gDialect
---
1. 第一个数据源      
master: 
  datasource:
    driverClassName: oracle.jdbc.driver.OracleDriver
    url: jdbc:oracle:thin:@localhost:1521/orcl
    username: t0
    password: t0
    type: com.zaxxer.hikari.HikariDataSource
    hikari:
      minimumIdle: 10
      maximumPoolSize: 200
      autoCommit: true
      idleTimeout: 30000
      poolName: MasterDatabookHikariCP
      maxLifetime: 1800000
      connectionTimeout: 30000
      connectionTestQuery: SELECT 1 FROM DUAL
1. 第二个数据源      
slave:
  datasource:
    driverClassName: oracle.jdbc.driver.OracleDriver
    url: jdbc:oracle:thin:@localhost:1521/orcl
    username: t1
    password: t1
    type: com.zaxxer.hikari.HikariDataSource
    hikari:
      minimumIdle: 10
      maximumPoolSize: 200
      autoCommit: true
      idleTimeout: 30000
      poolName: SlaveDatabookHikariCP
      maxLifetime: 1800000
      connectionTimeout: 30000
      connectionTestQuery: SELECT 1 FROM DUAL      
---
1. mybatis 配置,分表对应到不同的包中        
master:
  mybatis:
    config-location: classpath:/MyBatis-conf.xml
    type-aliases-package: com.pack.domain #master数据源对应的包
    mapper-locations:
    - classpath:/com/pack/mapper/oracle/*.xml #master数据源对应mapper文件
slave:
  mybatis:
    config-location: classpath:/MyBatis-conf.xml
    type-aliases-package: com.pack.slave.domain #slave数据源对应的包
    mapper-locations:
    - classpath:/com/pack/slave/mapper/oracle/*.xml    #slave数据源对应mapper文件
---
1. jpa相关的配置
master:
  jpa:
    repos: com.pack.base.repository #master数据源对应的包配置
    domain: com.pack.domain #master对应的实体包
slave:
  jpa:
    repos: com.pack.slave.repository #salve数据源对应的包配置
    domain: com.pack.slave.domain  #slave对应的实体包

以上就是两个数据源对应相关的配置了,大家注意看里面的注释。接下来我们看mabatis和jpa对应的类相关的配置了,都是固定的配置。

  • 数据源属性配置对应的java类配置

BaseProperties类

public class BaseDataSourceProperties implements BeanClassLoaderAware, InitializingBean {

  private ClassLoader classLoader;
  private String name;
  private boolean generateUniqueName;
  private Class initializeDataSourceBuilder() {
    return DataSourceBuilder.create(getClassLoader()).type(getType())
        .driverClassName(determineDriverClassName()).url(determineUrl())
        .username(determineUsername()).password(determinePassword());
  }

  public String getName() {
    return this.name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public boolean isGenerateUniqueName() {
    return this.generateUniqueName;
  }

  public void setGenerateUniqueName(boolean generateUniqueName) {
    this.generateUniqueName = generateUniqueName;
  }

  public Class