【Spring Boot 3】【数据源】自定义JDBC多数据源
【Spring Boot 3】【数据源】自定义JDBC多数据源
- 背景
- 介绍
- 开发环境
- 开发步骤及源码
- 工程目录结构
- 总结
背景
软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是要花费或多或少的时间、检索不止一篇资料才能得出一个可工作的DEMO,这占用了我大量的时间精力。因此本文旨在通过一篇文章即能还原出可工作的、甚至可用于生产的DEMO,期望初学者能尽快地迈过0到1的这一步骤,并在此基础上不断深化对相关知识的理解。
为达以上目的,本文会将开发环境、工程目录结构、开发步骤及源码尽量全面地展现出来,文字描述能简则简,能用代码注释的绝不在正文中再啰嗦一遍,正文仅对必要且关键的信息做重点描述。
介绍
《【Spring Boot 3】【数据源】自定义JDBC数据源》 说明了开发Spring Boot JDBC应用时如何自定义数据源,实际开发中一般只有在对接多个不同的数据源时才需自定义,本文介绍如何编写自定义对接多个JDBC数据源的程序代码。
开发环境
分类 | 名称 | 版本 |
---|---|---|
操作系统 | Windows | Windows 11 |
JDK | Oracle JDK | 21.0.1 |
IDE | IntelliJ IDEA | 2023.2.4 |
构建工具 | Apache Maven | 3.9.3 |
数据库 | MySQL | 8.0.33 |
开发步骤及源码
1> 准备2个数据源(创建2个数据库)。
- 数据源一
-- 创建第一个数据源
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'@'%';
2> 创建Maven工程,添加依赖。
<properties><spring-boot.version>3.2.1</spring-boot.version></properties><dependencies><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.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.2.0&l
相关文章:
【Spring Boot 3】【数据源】自定义JDBC多数据源
【Spring Boot 3】【数据源】自定义JDBC多数据源 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术…...
番茄工作法
番茄工作法是一种时间管理方法,主要适用于专注工作。它的基本步骤包括: 设定一个25分钟的闹钟。默念三二一(321法则),开始全身心投入工作。用专注的状态高效工作25分钟,不允许走神。如果做到了步骤3&#…...

【uniapp】调用阿里云OCR图片识别文字:
文章目录 一、效果:二、实现: 一、效果: 二、实现: 【阿里官方】高精版OCR文字识别【最新版】-云市场-阿里云 <template><view class"container"><!-- 选择图片 --><button click"imageO…...

软考高级选择考哪个好?
📒软考高级总共5个科目,同样是高级证书,认可度也有区别! 大家一般在「信息系统项目管理师」✔️和「系统架构设计师」✔️二选一 1️⃣信息系统项目管理师 ❤️信息系统项目管理师也叫「高项」,考试内容主要是「项目管理」相关&am…...

在云服务器ECS上用Python写一个搜索引擎
在云服务器ECS上用Python写一个搜索引擎 一、场景介绍二、搜索引擎的组成2.1 网页的爬取及排序2.2 用户使用搜索引擎进行搜索 三、操作步骤3.1 环境准备3.2 安装Anaconda3.3 安装Streamlit3.4 下载搜索引擎代码3.5 运行搜索引擎 四、常见问题4.1 运行setup.py时可能的问题4.2 如…...
Python在智能手机芯片研发
Python在智能手机芯片研发中扮演着重要的角色。以下是几个方面的重要性: 快速原型设计:Python具有简洁易读的语法和丰富的第三方库,使工程师能够快速构建原型和进行快速迭代。这对于芯片研发来说,可以加快开发速度,减少…...
K8S学习指南(70)-K8S中的informa机制
引言 在 Kubernetes 集群中,Informer 是一种重要的机制,用于监控和处理集群中资源对象的变化。它是基于观察者模式设计的,允许开发者注册对某类资源对象的关注,并在对象发生变化时得到通知。本文将深入介绍 Kubernetes 中的 Info…...

「MCU」SD NAND芯片之国产新选择优秀
文章目录 前言 传统SD卡和可贴片SD卡 传统SD卡 可贴片SD卡 实际使用 总结 前言 随着目前时代的快速发展,即使是使用MCU的项目上也经常有大数据存储的需求。可以看到经常有小伙伴这样提问: 大家好,请问有没有SD卡芯片,可以…...

【QML COOK】- 002-添加一个图片
1. 编辑main.qml import QtQuickWindow {width: 800height: 800visible: truetitle: qsTr("Hello World")Image {anchors.fill: parentsource: "qrc:/Resources/Images/arrow.png"} }将Window的width和height都改成800,因为我们要添加的图片大…...
Java10:内部类
7 内部类(了解)7.1 成员内部类7.2 静态内部类7.3 局部内部类7.4 匿名内部类 2.3. 静态内部类2.4. Lambda表达式, 7 内部类(了解) 内部类:就是在一个类的内部再定义一个类。 分类: 成员内部类 静…...
PostgreSQL 支持的字段类型
PostgreSQL 支持多种字段类型,以下是 PostgreSQL 13 版本中支持的所有字段类型: 数值类型: smallint:小整数类型。integer:整数类型。bigint:大整数类型。decimal:精确小数类型。numeric&#x…...

npm报错error:03000086:digital envelope routines::initialization error
可能是因为node版本过高,与现在的项目不符合 这是降低node版本的命令,然后重新运行 npm install npm8.1.2 -g...

el-table 展开行表格,展开的内容高度可以变化时,导致的固定列错位的问题
问题描述 一个可展开的表格(列设置了type“expand”),并且展开后的内容高度可以变化,会导致后面所有行的固定列错位,图如下,展示行中是一个树形表格,默认不展示子级,点击树形表格的…...
python插入排序
插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常使用in-place排序࿰…...

怎么将营业执照图片转为excel表格?(批量合并识别技巧)
一、为何要将营业执照转为excel表格? 1、方便管理:将营业执照转为excel格式,可以方便地进行管理和整理,快速查找需要的信息。 2、数据处理:Excel可以提供丰富的计算和数据分析功能,转化为excel后方便数据…...
关于java数组Arrays类
关于java数组Arrays类 前面的文章中,我们了解了数组创建方法等,我们本篇文章来了解一下数组的方法类Arrays,有了这个类,我们在日常写代码的时候就不不用自己去手动创建方法了😀。 Arrays类 数组的工具类java.util.A…...

LeetCode-58/709
1.最后一个单词的长度(58) 题目描述: 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 思路&…...
linux 流量监控
linux 流量监控 Linux 网络流量监控利器 iftop命令详解及实战 https://blog.csdn.net/qq_50247813/article/details/134164093 iftop命令详解 https://www.cnblogs.com/gaoyuechen/p/17300017.html 1 ubuntu如何查看流量监控 Ubuntu是一种非常流行的Linux发行版,…...
AUTOSAR从入门到精通-漫谈autosar软件架构(八)
目录 前言 原理 AUTOSAR的方法论 AUTOSAR架构的优点 AUTOSAR 软件架构 1.应用层...

C#设计模式之单例模式
介绍 单例模式(Singleton)保证一个类仅有一个实例,并提供一个访问它的全局访问点。 单例模式的结构图如下所示: 使用单例模式的原因 对一些类来说,只有一个实例是很重要的。如何才能保证一个类只有一个实例并且这个…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...

day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...