动态数据源

动态数据源

在工作中,我们可能会遇到下面这些情况,如果只是在配置文件中配置数据源就有可能太繁琐,或者无法满足要求

  1. 需要配置不止一个数据源,数据源的链接信息都不相同
  2. 需要在服务运行过程中,动态的添加,减少,切换所使用的数据源
  3. 同一服务中不同的接口服务需要调用不同的数据源信息

1.创建当前线程工具类

通过当前线程工具类,保留当前线程数据源信息,防止数据源切换时导致数据错误

package com.game.server.source;

import lombok.extern.log4j.Log4j;

/**
 * 保留当前线程数据源信息
 * 
 */
@Log4j
public class DataSourceContextHolder {

    /**
     * 线程级别的私有变量
     */
    private static final ThreadLocal<String> CONTEXTHOLDER = new ThreadLocal<>();

    /**
     * 切换数据源
     */
    public static void setDataSource(String datasourceId) {
        CONTEXTHOLDER.set(datasourceId);
        log.info("已切换到数据源:{}" + datasourceId);
    }

    public static String getDataSource() {
        return CONTEXTHOLDER.get();
    }

    /**
     * 删除数据源
     */
    public static void removeDataSource() {
        CONTEXTHOLDER.remove();
        log.info("已切换到主数据源");
    }

}

Jingxc大约 8 分钟java后端java后端Mysql
数据库中间件

数据库中间件

Apache ShardingSphere 是一款分布式的数据库生态系统,可以将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。

具体使用请参阅中文官网

Apache ShardingSphere 由 ShardingSphere-JDBC 和 ShardingSphere-Proxy 这 2 款既能够独立部署,又支持混合部署配合使用的产品组成。


Jingxc大约 14 分钟java后端java后端MysqlSharing-Shpere
多数据源

多数据源

工作中,在业务的发展或业务数据隔离的场景下,或者本身用的是不用类型的数据库,这就需要引入多数据源的配置,这里着重讲述如何进行配置,我们可能会遇到下面的情况

1)同一个项目中涉及两个或多个业务数据库,它们之间相互独立,这种情况也可以作为两个或多个项目来开发

2)两个或多个数据库之间是主从关系,主库负责写,从库负责读(建议使用数据库中间件,如sharding-sphere)

3)业务存储在不同类型的数据库里,如oracle和mysql

maven依赖

版本可根据需求添加,查找版本情况


Jingxc大约 4 分钟java后端java后端Mysql