# multi-datasource **Repository Path**: billon/multi-datasource ## Basic Information - **Project Name**: multi-datasource - **Description**: 多数据源的热切换 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-05-30 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 数据读写分离及数据源热切换实现方案 ## 一、背景 公司的业务系统都部署在华为云,当华为云出问题时,整个公司的业务都会受到影响,因此需要系统同时在多云部署,并且可以完成数据源的热切换。 ## 二、目标 1. 支持一主多从的读写分离配置,可独立使用,也可配合分库分表使用。 2. 同一线程且同一数据库连接内,如有写入操作,以后的读操作均从主库读取,用于保证数据一致性。 3. 对业务层代码无侵入。 4. 支持数据源的热切换。 ## 三、实现方式 1. [SpringBoot + ShardingJDBC + Apollo + Hikari](./shardingjdbc-apollo-springboot/README.md) 2. [SpringMVC + ShardingJDBC + Apollo + Druid](./shardingjdbc-apollo-springmvc/README.md) 3. [SpringBoot + DynamicDatasource](./dynamic-datasource-springboot/README.md) 4. [SpringMVC + DynamicDatasource](./dynamic-datasource-springmvc/README.md) ## 四、运行示例 1. 功能说明 1. 从apollo中读取数据源(master,slave)配置 2. 提供了两个接口http://localhost:8080/query,http://localhost:8080/insert,分别用来执行数据的读和写操作。读操作都会落到slave,写操作都会落到master。 3. 通过apollo后台修改数据源配置,可以实现数据源的热切换。此时再访问http://localhost:8080/query,http://localhost:8080/insert,可以看到数据源切换后的效果。 环境说明: * 示例中使用的master和slave是两个独立的库,没有数据同步,因此看到的数据是不一样的。 * 示例中使用的apollo是官方提供的演示环境。 地址:http://106.54.227.205/,用户名:apollo,密码:admin,示例项目appid:appid-1234。 2. 演示 1. 登录apollo演示环境,添加数据源配置(示例中已经配置好了,在本地启动的话只需要修改数据源的url)。 ![image-20200518160756759](images/apollo数据源配置.png) 2. 访问接口,查看效果。 * 访问http://localhost:8080/query,可以看到读操作都被解析到slave数据库。 ![image-20200518161144683](images/数据源切换前读操作.png) ![image-20200518161300605](images/数据源切换前从库.png) * 访问http://localhost:8080/insert,可以看到写操作都被解析到master数据库 ![image-20200518161228472](images/数据源切换前写操作.png) ![image-20200518161338779](images/数据源切换前主库.png) 3. 在apollo切换数据源,变化master,slave,属性发布后再次刷新页面,数据源被切换。 ![image-20200518162117661](images/apollo数据源切换.png) ![image-20200518162208764](images/数据源切换后读操作.png)