1、SpringBoo中Mybatis多数据源动态切换

embedded/2024/11/28 6:24:48/

我们以一个实例来详细说明一下如何在SpringBoot中动态切换MyBatis的数据源。

一、需求

1、用户可以界面新增数据源相关信息,提交后,保存到数据库

2、保存后的数据源需要动态生效,并且可以由用户动态切换选择使用哪个数据源

3、数据库保存了多个数据源的相关记录后,要求在系统启动时把这个数据创建出来,用户在使用时可以自由选择切换

二、项目准备

创建项目的基础骨架

建项目

项目名:dds

改pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.xiaoxie</groupId><artifactId>dds</artifactId><version>0.0.1-SNAPSHOT</version><name>dds</name><description>dds</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter-test</artifactId><version>3.0.3</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

修改yml

server:port: 8888spring:datasource:druid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/dds?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghaiusername: rootpassword: rootmybatis:mapper-locations: classpath:mapper/**.xmlconfiguration:map-underscore-to-camel-case: true

主启动类

@SpringBootApplication
public class DdsApplication {public static void main(String[] args) {SpringApplication.run(DdsApplication.class, args);}}

做完成上面就是不带任何业务类的一个基础项目框架。

数据库准备

新增一个数据库dds,其中有两个数据表,一个是用来存储用户提交的数据源信息的(ds),一个是后续我们测试效果用的(test)。

CREATE TABLE `ds` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '数据源名称',`url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'url',`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'username',`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'password',`create_time` datetime NOT NULL COMMENT '创建时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;CREATE TABLE `test` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;INSERT INTO `dds`.`test` (`id`, `name`) VALUES (1, '王二麻子');

新增一个测试库test,其中有一个测试数据表,这个表的结构保持与dds库中的test表一致,但数据不一样。

CREATE TABLE `test` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;INSERT INTO `test`.`test` (`id`, `name`) VALUES (1, '张三');

三、处理与前端的交互

后端接口

新增一个Controller类,这个类中添加一个处理器方法:AddSourceController

@Controller
@Slf4j
@RequiredArgsConstructor
public class AddSourceController {private final DsService dsService;@GetMapping("/toAddSource")public String addSource(){return "add_source";}
}

这样的话当我们请求项目的/toAddSource接口时,跳转到add_source.html,在这个页面中我们进行用户数据的提交动作。

前端页面

html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>添加数据源</title><link rel="stylesheet" th:href="@{/css/style.css}"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css"><script th:src="@{/js/jquery-3.6.0.min.js}"></script><script th:src="@{/js/crypto-js-4.1.1.min.js}"></script><sc

http://www.ppmy.cn/embedded/141118.html

相关文章

MySQL查询缓存详解

一、查询缓存的基本概念 MySQL 的查询缓存是一种用于存储查询结果的内存区域。当一个查询被执行时&#xff0c;MySQL 首先检查查询缓存中是否已经存在相同的查询结果。如果存在&#xff0c;直接从查询缓存中返回结果&#xff0c;而无需再次执行查询语句&#xff0c;从而大大提高…

龙头股的走势判断-龙头股的两种走势形态-如何避开常见四种陷进

强势龙头股的两种走势形态-一气呵成形态与空中加油形态。 主力操作强势龙头股的两种惯用手法&#xff0c;强势股短期内股价涨幅较大&#xff0c;如果按强势龙头股走势表现划分的话&#xff0c;可以将其划分为一气呵成式和空中加油式两种。 上图强势龙头股的两种拉升走势。 一…

Vue Promise的使用,界面使用异步线程循环执行方法(模拟线程)

目录 1.定义开始和退出标识 2.定义开始方法--异步 3.定义循环方法&#xff0c;以及控制规则 4.定义业务方法 1.定义开始和退出标识 为的是能控制开始和结束&#xff0c;记得销毁时要结束循环&#xff0c;否则方法会一直被执行 data() {return {isrunning: false, // 轮询…

16 —— Webpack多页面打包

需求&#xff1a;把 黑马头条登陆页面-内容页面 一起引入打包使用 步骤&#xff1a; 准备源码&#xff08;html、css、js&#xff09;放入相应位置&#xff0c;并改用模块化语法导出 原始content.html代码 <!DOCTYPE html> <html lang"en"><head&…

SAP开发语言ABAP开发入门

1. 了解ABAP开发环境和基础知识 - ABAP简介 - ABAP&#xff08;Advanced Business Application Programming&#xff09;是SAP系统中的编程语言&#xff0c;主要用于开发企业级的业务应用程序&#xff0c;如财务、物流、人力资源等模块的定制开发。 - 开发环境搭建 - 首先需…

unity 使用UI上的数字按钮,给text添加数字,并且显示光标,删除光标前数字,

今天有个需求&#xff0c;输入身份证&#xff0c;但是不用键盘&#xff0c;要点击按钮输入数字&#xff0c;并且可以控制光标&#xff0c; 1、数字按钮&#xff1a;点击后text添加数字内容 2、删除按钮&#xff1a;删除光标前的一个字符 3、左箭头&#xff1a;移动光标向左移动…

医学机器学习:数据预处理、超参数调优与模型比较的实用分析

摘要 本文介绍了医学中的机器学习&#xff0c;重点阐述了数据预处理、超参数调优和模型比较的技术。在数据预处理方面&#xff0c;包括数据收集与整理、处理缺失值、特征工程等内容&#xff0c;以确保数据质量和可用性。超参数调优对模型性能至关重要&#xff0c;介绍了多种调…

TCMC-PMSA; p-SCN-Bn-TCMC; TCMC-PSMA-617

p-SCN-Bn-TCMC拥有双功能配体的特性&#xff0c;既是螯合剂&#xff0c;也具备共价连接到生物靶向载体&#xff08;如抗体、肽和蛋白质&#xff09;的反应位点。该化合物的分子式为C24H37N9O4S4HCl&#xff0c;分子量达到693.5&#xff0c;纯度通常保持在95%以上。p-SCN-Bn-TCM…