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

【Spring Boot 3】【数据源】自定义多数据源

【Spring Boot 3】【数据源】自定义多数据源

  • 背景
  • 介绍
  • 开发环境
  • 开发步骤及源码
  • 工程目录结构
  • 总结

背景

软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是要花费或多或少的时间、检索不止一篇资料才能得出一个可工作的DEMO,这占用了我大量的时间精力。因此本文旨在通过一篇文章即能还原出可工作的、甚至可用于生产的DEMO,期望初学者能尽快地迈过0到1的这一步骤,并在此基础上不断深化对相关知识的理解。
为达以上目的,本文会将开发环境、工程目录结构、开发步骤及源码尽量全面地展现出来,文字描述能简则简,能用代码注释的绝不在正文中再啰嗦一遍,正文仅对必要且关键的信息做重点描述。

介绍

在 《【Spring Boot 3】【数据源】自定义JDBC多数据源》 、《【Spring Boot 3】【数据源】自定义JPA多数据源》 和 【Spring Boot 3】【数据源】自定义MyBatis多数据源 中分别说明了开发Spring Boot应用集成JDBC、JPA、MyBatis实现数据库操作时如何自定义多数据源,有时开发可能需要使用多种数据库访问技术和ORM框架,本文介绍在同时启用JDBC、JPA、MyBatis时如何自定义多数据库。

开发环境

分类名称版本
操作系统WindowsWindows 11
JDKOracle JDK21.0.1
IDEIntelliJ IDEA2023.2.4
构建工具Apache Maven3.9.3
数据库MySQL8.0.33

开发步骤及源码

1> 准备3个数据源(创建3个数据库)。

  • 数据源一
-- 创建第一个数据源
CREATE SCHEMA IF NOT EXISTS `db1` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;-- 创建第一个数据源中的数据表
CREATE TABLE IF NOT EXISTS `db1`.`product`
(`id`    BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',`name`  VARCHAR(100)    NOT NULL COMMENT '产品名称',`price` DECIMAL         NOT NULL COMMENT '产品价格',PRIMARY KEY (`id`),UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE
)ENGINE = InnoDBDEFAULT CHARACTER SET = utf8mb4COLLATE = utf8mb4_bin;-- 创建用户
DROP USER IF EXISTS 'userA'@'%';
CREATE USER 'userA'@'%' IDENTIFIED BY '123123';-- 给用户赋予访问第一个数据源的权限
GRANT ALL PRIVILEGES ON db1.* TO 'userA'@'%';
  • 数据源二
-- 创建第二个数据源
CREATE SCHEMA IF NOT EXISTS `db2` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;-- 创建第二个数据源中的数据表
CREATE TABLE IF NOT EXISTS `db2`.`customer`
(`id`   BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',`name` VARCHAR(100)    NOT NULL COMMENT '顾客名称',`age`  INT             NOT NULL COMMENT '年龄',PRIMARY KEY (`id`),UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE
)ENGINE = InnoDBDEFAULT CHARACTER SET = utf8mb4COLLATE = utf8mb4_bin;-- 创建用户
DROP USER IF EXISTS 'userB'@'%';
CREATE USER 'userB'@'%' IDENTIFIED BY '456456';-- 给用户赋予访问第二个数据源的权限
GRANT ALL PRIVILEGES ON db2.* TO 'userB'@'%';
  • 数据源三
-- 创建第三个数据源
CREATE SCHEMA IF NOT EXISTS `db3` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;-- 创建第三个数据源中的数据表
CREATE TABLE IF NOT EXISTS `db3`.`manufacturer`
(`id`      BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',`name`    VARCHAR(100)    NOT NULL COMMENT '制造商名称',`address` VARCHAR(100)    NOT NULL COMMENT '制造商地址',PRIMARY KEY (`id`),UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE
)ENGINE = InnoDBDEFAULT CHARACTER SET = utf8mb4COLLATE = utf8mb4_bin;-- 创建用户
DROP USER IF EXISTS 'userC'@'%';
CREATE USER 'userC'@'%' IDENTIFIED BY '789789';-- 给用户赋予访问第三个数据源的权限
GRANT ALL PRIVILEGES ON db3.* TO 'userC'@'%';

2> 创建Maven工程,添加依赖。

    <properties><spring-boot.version>3.2.1</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId><version>${spring-boot.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId><version>${spring-boot.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>${spring-boot.version}</version><scope>test</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.5</version><exclusions><exclusion><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>3.0.3</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.2.0</version><scope>runtime</scope></dependency><dependency>

相关文章:

  • GPT实战系列-ChatGLM3管理工具的API接口
  • 浏览器深色模式
  • C++ OpenGL 3D Game Tutorial 2: Making OpenGL 3D Engine学习笔记
  • python期末考试:python的基本使用
  • GPT-4技术报告的解读(二)
  • 【Python】数据可视化--基于TMDB_5000_Movie数据集
  • 大一统的监控探针采集器 cprobe
  • Linux 脚本编程题库
  • 【2024】OAK智能深度相机校准教程
  • SpringBoot 入门 SpringBoot 与其他项目整合 集成 Druid 数据库连接池 集成 Log 日志 配置修改
  • Python从入门到精通秘籍五
  • ssm基于vue的儿童教育网站的设计与实现论文
  • 解决ELK日志收集中Logstash报错的关键步
  • NI PXIe-6386国产替代,8路AI(16位,14 MS/s/ch),2路A​O,24路DIO,PXI多功能I/O模块
  • 恢复 iPhone 和 iPad 数据的 10 个好工具 - [苹果数据恢复]
  • Brief introduction of how to 'Call, Apply and Bind'
  • codis proxy处理流程
  • Docker容器管理
  • egg(89)--egg之redis的发布和订阅
  • ESLint简单操作
  • FastReport在线报表设计器工作原理
  • Laravel Mix运行时关于es2015报错解决方案
  • Linux快速复制或删除大量小文件
  • Python学习之路13-记分
  • Sass 快速入门教程
  • Selenium实战教程系列(二)---元素定位
  • Service Worker
  • 使用common-codec进行md5加密
  • 数据结构java版之冒泡排序及优化
  • 问题之ssh中Host key verification failed的解决
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​虚拟化系列介绍(十)
  • #QT(串口助手-界面)
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (区间dp) (经典例题) 石子合并
  • (一)Linux+Windows下安装ffmpeg
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)ORM
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (转载)Linux网络编程入门
  • .NET Core 2.1路线图
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @Bean有哪些属性
  • @NestedConfigurationProperty 注解用法
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [AIGC] SQL中的数据添加和操作:数据类型介绍
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured
  • [BZOJ2850]巧克力王国