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

Spring Boot 项目多数据源配置【dynamic datasource】

前言:

随着互联网的发展,数据库的读写分离、数据迁移、多系统数据访问等多数据源的需求越来越多,我们在日常项目开发中,也不可避免的为了解决这个问题,本篇来分享一下在 Spring Boot 项目中使用多数据源访问不通的数据库。

业务场景:

当前开发的一个系统,因为数据量以及报表层面的需求要求,需要把 MySQL 的数据同步到大数据数据库 StarRocks 中,这里就涉及到了两个数据源:MySQL 和 StarRocks,想要完成这个功能的前置就是需要项目支持多数据源配置。

方案选型:

项目中使用了 MyBatis-Plus 插件,因此不在选择自己去实现多数据源的配置,直接使用 baomidou 的 dynamic-datasource-spring-boot-starter 来实现多数据源切换的功能。

引入依赖:

使用 baomidou 的 dynamic-datasource-spring-boot-starter 需要引入如下依赖:

<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.0</version>
</dependency>

配置多数据源:

我这里配置了 MySQL 和 StarRocks 两个数据源,StarRocks 的驱动也是使用 MySQL 的驱动包,多数据源可以配置很多个,根据自己的需求来进行配置。

#mysql
spring.datasource.dynamic.primary = master
spring.datasource.dynamic.strict = false
spring.datasource.dynamic.datasource.master.driver-class-name = com.mysql.cj.jdbc.Driver
spring.datasource.dynamic.datasource.master.url = jdbc:mysql://xx.xxx.xx.xxx:3306/xxxxx?useUnicode=true&characterEncoding=utf8&useSSL=true&rewriteBatchedStatements=true&allowMultiQueries=true
spring.datasource.dynamic.datasource.master.username = xxxxx
spring.datasource.dynamic.datasource.master.password = xxxxx
#starrocks
spring.datasource.dynamic.datasource.starrocks.driver-class-name = com.mysql.cj.jdbc.Driver
spring.datasource.dynamic.datasource.starrocks.url = jdbc:mysql://xx.xxx.xx.xxx:3306/xxxxx?useUnicode=true&characterEncoding=utf8&useSSL=true&rewriteBatchedStatements=true&allowMultiQueries=true
spring.datasource.dynamic.datasource.starrocks.username = xxxxx
spring.datasource.dynamic.datasource.starrocks.password = xxxxx

多数据源测试

Service 层代码如下:

public interface DynamicDemoService {/** * @return java.lang.Long* @author author* @date 2025/3/24 14:27* @description 查询系统总数*/Long queryCount();}/*** @ClassName: DynamicDemoServiceImpl* @Author: Author* @Date: 2025/3/14 15:06* @Description:*/
@Service
@Slf4j
@DS("starrocks")
public class DynamicDemoServiceImpl implements DynamicDemoService {@Autowiredprivate DynamicDemoMapper dynDemoMapper;@Overridepublic Long queryCount() {return dynDemoMapper.queryCount();}}

上面代码我们可以看到和普通的 Service 代码区别不大,唯一需要注意的是,在 Service 类上加上 @DS 注解,并在指定数据源名称,(也可以在方法上加上 @DS 注解)。

Controller 层代码如下:

/*** @ClassName: DynamicDemoController* @Author: Author* @Date: 2025/3/14 15:12* @Description:*/
@RestController
@RequestMapping("/dynamic")
@Api(tags = {"【测试 Controller】"})
@Slf4j
public class DynamicDemoController {@Autowiredprivate DynamicDemoService dynamicDemoService;@RequestMapping("/test")public RetVo<Long> test() {Long count =  dynamicDemoService.queryCount();return RetVo.success(count);}}

测试结果如下:

在这里插入图片描述

结果符合预期。

多数据源的使用场景:

  • 读写分离:在高并发的系统中,数据库的读操作和写操作的频率和性能要求往往会不同,使用读写分离可以极大的提升系统的性能。
  • 数据迁移和系统升级:在系统升级或者数据迁移的过程中,往往涉及到新库和旧库同时使用,这时候就需要使用到多数据源。
  • 分库分表:业务量上升到一定的量后,单库单表的读写性能会成为业务的瓶颈,这个时候我们就会想到使用分库分表的方案,此时就可以使用多数据源来实现多库多表的访问了。
  • 不同数据系统的访问:在同一个系统里,可能会涉及到 MySQL、Doris、StarRocks 等数据库,系统想要在不同的数据库之间切换访问,这时候就需要使用到多数据源了。

总结:本篇简单分享了如何在 Spring Boot 项目中使用多数据源的配置,并附上了简单的代码演示,希望帮助到正需要配置多数据源的你。

如有不正确的地方欢迎各位指出纠正。

http://www.xdnf.cn/news/617851.html

相关文章:

  • C++进阶--c++11(02)
  • 【算法】: 前缀和算法(利用o(1)的时间复杂度快速求区间和)
  • 全球复合铁路枕木市场深度分析:技术革新与区域增长潜力(2024-2031)
  • IIS部署微信支付模块问题
  • 欧拉公式的历史脉络、数学证明和现代意义
  • 信息学奥赛及各种程序设计竞赛中常见的名词解释
  • Android四大组件学习总结
  • PyQt学习系列07-数据库操作与ORM集成
  • JavaMail的使用
  • 重读《人件》Peopleware -(12-1)Ⅱ 办公环境 Ⅴ 大脑时间与身体时间(上)
  • 超简单 FishSpeech 本地部署
  • 【游戏设计】游戏玩法与游戏机制
  • 决策树引导:如何选择最适合你的机器学习算法
  • 文章记单词 | 第110篇(六级)
  • Java 8 Lambda 表达式使用说明与案例
  • 前端测试简介
  • Python排序函数全面指南:从基础到高级
  • 字符编码详解:ASCII、Latin1、Unicode、UTF-8 与 GBK
  • 365打卡第N1周: one-hot编码案例
  • 【数据反哺运营】用Python构建可落地的商品结构分析方法论-某朴超市
  • 【风控】申请评分卡(A卡)模型
  • QString 写时拷贝简介
  • 2025年电工杯B题思路讲解问题一四种算法
  • Java 集合框架核心知识点全解析:从入门到高频面试题(含 JDK 源码剖析)
  • 解决:dpkg: error: dpkg frontend lock is locked by another process
  • Coze工作流-变量聚合模块的应用
  • IEEE 流程
  • OSS对象存储如何避免被攻击恶意刷流量?
  • QT中延时的用法及定时器的用法
  • 异地容灾、热备与冷备:核心概念解析、技术对比及行业解决方案指南