SpringBoot+MybatisPlus多数据源动态切换

公司某项目做大屏展示,但数据来源自7个不同的数据库,需要涉及跨库查询,要求。

本项目采用SpringBoot+MybatisPlus做服务端提供RESTful接口,前后端分离开发,总结一下项目中实现的动态数据源切换的实现方式。

首先在application文件中配置数据源

spring:
  aop:
    proxy-target-class: true
    auto: true
  datasource:
    druid:
      # 一期数据源
      db1:
        url: jdbc:oracle:thin:@172.16.3.131:1521:orcl
        username: ZHJGDSJ
        password: ZHJGDSJ
        driver-class-name: oracle.jdbc.driver.OracleDriver
        initialSize: 5
        minIdle: 5
        maxActive: 20
      # 二期 诚信监管
      db2:
        url: jdbc:oracle:thin:@172.17.2.119:1521:orcl
        username: cxjg_test1
        password: 123456
        driver-class-name: oracle.jdbc.driver.OracleDriver
        initialSize: 5
        minIdle: 5
        maxActive: 20
      # 二期 协同监管
      db3:
        url: jdbc:oracle:thin:@172.17.2.119:1521:orcl
        username: xtjg_test
        password: 123456
        driver-class-name: oracle.jdbc.driver.OracleDriver
        initialSize: 5
        minIdle: 5
        maxActive: 20
      # 二期 公示系统
      db4:
        url: jdbc:oracle:thin:@172.17.2.119:1521:orcl
        username: GSGS
        password: 123456
        driver-class-name: oracle.jdbc.driver.OracleDriver
        initialSize: 5
        minIdle: 5
        maxActive: 20
      # 二期 省局-浪潮库
      db5:
        url: jdbc:oracle:thin:@172.16.1.26:1521:orcl
        username: GSYW
        password: 123456
        driver-class-name: oracle.jdbc.driver.OracleDriver
        initialSize: 5
        minIdle: 5
        maxActive: 20
      # 二期 市局-浪潮库
      db6:
        url: jdbc:oracle:thin:@172.16.1.65:1521:orcl
        username: GSYWSJ
        password: 123456
        driver-class-name: oracle.jdbc.driver.OracleDriver
        initialSize: 5
        minIdle: 5
        maxActive: 20
      # 二期 正元
      db7:
        url: jdbc:oracle:thin:@172.17.2.119:1521:orcl
        username: ZHJGDSJ
        password: 123456
        driver-class-name: oracle.jdbc.driver.OracleDriver
        initialSize: 5
        minIdle: 5
        maxActive: 20

创建一个数据源枚举类

package com.rexen.di.management.common.type;

/**
 * @Author Jimmy
 * @date 2019/2/7.
 */
public enum DBTypeEnum {
    db1("db1"), db2("db2"), db3("db3"), db4("db4"), db5("db5"), db6("db6"), db7("db7");
    private String value;

    DBTypeEnum(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }
}

创建一个上下文来缓存当前数据源

package com.rexen.di.management.boot.config;

import com.rexen.di.management.common.type.DBTypeEnum;

/**
 * @Author Jimmy
 * @date 2019/2/7.
 */
public class DbContextHolder {
    private static final ThreadLocal contextHolder = new ThreadLocal<>();
    /**
     * 设置数据源
     * @param dbTypeEnum
     */
    public static void setDbType(DBTypeEnum dbTypeEnum) {
        contextHol
  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值