当前位置: 首页 > news >正文

Spring Boot + MyBatis-Plus 读写分离与多 Slave 负载均衡示例

Spring Boot + MyBatis-Plus 读写分离与多 Slave 负载均衡示例

一、项目结构

src/main/java/com/example/demo/
├── config/
│   ├── DataSourceConfig.java         # 数据源配置
│   ├── MyBatisPlusConfig.java        # MyBatis-Plus配置
├── constant/
│   ├── DataSourceType.java           # 数据源类型枚举
├── context/
│   ├── DataSourceContextHolder.java  # 数据源上下文
├── aspect/
│   ├── DataSourceAspect.java         # 注解驱动的数据源切换
│   ├── DataSourceRouteAspect.java    # 自动路由的数据源切换
├── annotation/
│   ├── DataSource.java               # 自定义数据源注解
├── loadbalancer/
│   ├── SlaveDataSourceLoadBalancer.java # 从库负载均衡器
├── mapper/
│   ├── UserMapper.java               # DAO接口
├── service/
│   ├── UserService.java              # 服务接口
│   ├── impl/
│       └── UserServiceImpl.java      # 服务实现
├── controller/
│   ├── UserController.java           # 控制器
└── DemoApplication.java              # 启动类

二、核心代码实现

(一)数据源类型枚举

// constant/DataSourceType.java
package com.example.demo.constant;public enum DataSourceType {MASTER,SLAVE_1,SLAVE_2,SLAVE_3
}

(二)数据源上下文

// context/DataSourceContextHolder.java
package com.example.demo.context;import com.example.demo.constant.DataSourceType;public class DataSourceContextHolder {private static final ThreadLocal<DataSourceType> contextHolder = new ThreadLocal<>();public static void setDataSource(DataSourceType type) {contextHolder.set(type);}public static DataSourceType getDataSource() {return contextHolder.get();}public static void clearDataSource() {contextHolder.remove();}
}

(三)动态数据源

// config/DynamicRoutingDataSource.java
package com.example.demo.config;import com.example.demo.context.DataSourceContextHolder;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;public class DynamicRoutingDataSource extends AbstractRoutingDataSource {@Overrideprotected Object determineCurrentLookupKey() {return DataSourceContextHolder.getDataSource();}
}

(四)数据源配置

// config/DataSourceConfig.java
package com.example.demo.config;import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import com.example.demo.constant.DataSourceType;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;@Configuration
public class DataSourceConfig {@Primary@Bean(name = "masterDataSource")@ConfigurationProperties("spring.datasource.master")public DataSource masterDataSource() {return DruidDataSourceBuilder.create().build();}@Bean(name = "slave1DataSource")@ConfigurationProperties("spring.datasource.slave1")public DataSource slave1DataSource() {return DruidDataSourceBuilder.create().build();}@Bean(name = "slave2DataSource")@ConfigurationProperties("spring.datasource.slave2")public DataSource slave2DataSource() {return DruidDataSourceBuilder.create().build();}@Bean(name = "slave3DataSource")@ConfigurationProperties("spring.datasource.slave3")public DataSource slave3DataSource() {return DruidDataSourceBuilder.create().build();}@Beanpublic DataSource dynamicDataSource() {DynamicRoutingDataSource dynamicDataSource = new DynamicRoutingDataSource();// 设置默认数据源dynamicDataSource.setDefaultTargetDataSource(masterDataSource());// 设置多数据源映射Map<Object, Object> targetDataSources = new HashMap<>();targetDataSources.put(DataSourceType.MASTER, masterDataSource());targetDataSources.put(

相关文章:

  • 适老化场景重构:现代家政老年照护虚拟仿真实训室建设方案​
  • 如何在 vue 中实现一个自定义拖拽的指令或插件
  • qt 事件顺序
  • Laravel模型状态:深入理解Eloquent的隐秘力量
  • QT常用控件(1)
  • metersphere不同域名的参数在链路测试中如何传递?
  • 项目任务,修改svip用户的存储空间。
  • 微博app 最新版本15.5.2 mfp 分析
  • RagFlow优化代码解析(一)
  • 操作系统:生态思政
  • 现代密码学 | 椭圆曲线密码学—附py代码
  • 如何从系统日志中排查磁盘错误?
  • 0518蚂蚁暑期实习上机考试题1:数组操作
  • “轻量应用服务器” vs. “云服务器CVM”:小白入门腾讯云,哪款“云机”更适合你?(场景、配置、价格对比解析)
  • 神经符号集成-三篇综述
  • Docker 镜像(或 Docker 容器)中查找文件命令
  • 2023-2025 时序大模型相关工作汇总
  • 生产环境中安装和配置 Nginx 以部署 Flask 应用的详细指南
  • 架构设计的目标:高内聚、低耦合的本质
  • Cat.1与Cat.4区别及应用场景
  • php 网站做分享功能/搜索引擎优化的核心及内容
  • 新时代推进政府网站集约化建设/网络营销的特点分别是
  • 怎样建立网站快捷方式/手游推广个人合作平台
  • 网站图片如何做水印/精品成品网站源码
  • 商会网站的建设/营销云
  • 淘宝可以到哪些网站做推广/seo顾问