目录

多数据源(读写分离)

yudao-spring-boot-starter-mybatis (opens new window) 技术组件,除了提供 MyBatis 数据库操作,还提供了如下 2 种功能:

# 1. 数据连接池

友情提示:

如果你未学习过 Druid 数据库连接池,可以后续阅读 《芋道 Spring Boot 数据库连接池入门》 (opens new window) 文章。

1
2
3
4
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>

# 1.1 Druid 监控配置

application-local.yaml ( opens new window) 配置文件中,通过 spring.datasource.druid 配置项,仅仅设置了 Druid 监控相关的配置项目,具体数据库的设置需要使用 Dynamic Datasource 的配置项。如下图所示:

 配置项

# 1.2 Druid 监控界面

① 访问后端的 /druid/index.html 路径,例如说本地的 http://127.0.0.1:48080/druid/index.html 地址,可以查看到 Druid 监控界面。如下图所示:

Druid 监控界面

② 访问前端的 [基础设施 -> MySQL 监控] 菜单,也可以查看到 Druid 监控界面。如下图所示:

Druid 监控界面

补充说明:

前端 [基础设施 -> MySQL 监控] 菜单,通过 iframe 内嵌后端的 /druid/index.html 路径。

如果你想自定义地址,可以前往 [基础设置 -> 配置管理] 菜单,设置 key 为 url.druid 配置项。

# 2. 多数据源

友情提示:

如果你未学习过多数据源,可以后续阅读 《芋道 Spring Boot 多数据源(读写分离)入门》 ( opens new window) 文章。

1
2
3
4
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
</dependency>

# 2.1 多数据源配置

application-local.yaml ( opens new window) 配置文件中,通过 spring.datasource.dynamic 配置项,配置了 Master-Slave 主从两个数据源。如下图所示:

 配置项

# 2.2 数据源切换

# 2.2.1 @Master 注解

在方法上添加 @Master ( opens new window) 注解,使用名字为 master 的数据源,即使用【主】库,一般适合【写】场景。示例如下图:

@Master 注解

由于项目的 spring.datasource.dynamic.primarymaster,默认使用【主】库,所以无需手动添加 @Master 注解。

# 2.2.2 @Slave 注解

在方法上添加 @Slave ( opens new window) 注解,使用名字为 slave 的数据源,即使用【从】库,一般适合【读】场景。示例如下图:

@Slave 注解

# 2.2.3 @DS 注解

在方法上添加 @DS ( opens new window) 注解,使用指定名字的数据源,适合多数据源的情况。示例如下图:

@DS 注解

# 2.3 分布式事务

在使用 Spring @Transactional 声明的事务中,无法进行数据源的切换,此时有 3 种解决方案:

① 拆分成多个 Spring 事务,每个事务对应一个数据源。如果是【写】场景,可能会存在多数据源的事务不一致的问题。

② 引入 Seata 框架,提供完整的分布式事务的解决方案,可学习 《芋道 Seata 极简入门 》 ( opens new window) 文章。

③ 使用 Dynamic Datasource 提供的 @DSTransactional ( opens new window) 注解,支持多数据源的切换,不提供绝对可靠的多数据源的事务一致性(强于 ① 弱于 ②),可学习 《DSTransactional 实现源码分析 》 ( opens new window) 文章。

# 3. 分库分表

建议采用 ShardingSphere 的子项目 Sharding-JDBC 完成分库分表的功能,可阅读 《芋道 Spring Boot 分库分表入门 》 ( opens new window) 文章,学习如何整合进项目。

上次更新: 2023/04/07, 23:25:01

本站由 钟意 使用 Stellar 1.28.1 主题创建。
又拍云 提供CDN加速/云存储服务
vercel 提供托管服务
湘ICP备2023019799号-1
总访问 次 | 本页访问