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

Spring Boot 2.x + Mybatis Plus 多数据源配置

MP官方文档提供有多数据源配置方案,这里没有使用其方案,原因是项目不想引入过多依赖

提供一下官网的文档供各位选择多数据源支持 | MyBatis-Plus (baomidou.com)

配置文件

application.properties文件配置两个数据源信息,yaml文件自行修改格式

# db1 database
spring.datasource.db1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.db1.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.db1.url=jdbc:mysql://127.0.0.1:3306/db1?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&rewriteBatchedStatements=true
spring.datasource.db1.username=root
spring.datasource.db1.password=123456
spring.datasource.db1.hikari.pool-name=db1
spring.datasource.db1.hikari.auto-commit=true
spring.datasource.db1.hikari.connection-timeout=30000
spring.datasource.db1.hikari.idle-timeout=600000
spring.datasource.db1.hikari.max-lifetime=1800000
spring.datasource.db1.hikari.maximum-pool-size=10
spring.datasource.db1.hikari.leak-detection-threshold=30000# db2 database
spring.datasource.db2.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.db2.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.db2.url=jdbc:mysql://127.0.0.1:3306/db2?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&rewriteBatchedStatements=true
spring.datasource.db2.username=root
spring.datasource.db2.password=123456
spring.datasource.db2.hikari.pool-name=db2
spring.datasource.db2.hikari.auto-commit=true
spring.datasource.db2.hikari.connection-timeout=30000
spring.datasource.db2.hikari.idle-timeout=600000
spring.datasource.db2.hikari.max-lifetime=1800000
spring.datasource.db2.hikari.maximum-pool-size=10
spring.datasource.db2.hikari.leak-detection-threshold=30000

 创建DataSourceConfig类

我这里两个数据源写在一个文件里面,也可以拆分成两个。

注意mapper接口和xml的目录,不同的数据源在不同的包里面

因为整合的mybatis-plus,所以这里的SqlSessionFactory 为 MyBatis-Plus 的 SqlSessionFactory

com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean
@Configuration
@MapperScan(basePackages = {"com.xxx.mapper.db1"}, sqlSessionFactoryRef = "db1SqlSessionFactory")
@MapperScan(basePackages = {"com.xxx.mapper.db2"}, sqlSessionFactoryRef = "db2SqlSessionFactory")
public class DataSourceConfig {/***  db1数据源配置* @return*/@Bean(name = "db1DataSourceProperties")@Primary@ConfigurationProperties("spring.datasource.db1")public DataSourceProperties db1DataSourceProperties() {return new DataSourceProperties();}@Primary@Bean(name = "db1DataSource")@Qualifier("db1DataSource")@ConfigurationProperties(prefix = "spring.datasource.db1.hikari")public HikariDataSource db1DataSource() {return db1DataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build();}@Primary@Bean("db1DataSourceTransactionManager")public DataSourceTransactionManager db1DataSourceTransactionManager(@Qualifier("db1DataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Primary@Bean("db1SqlSessionFactory")public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();sqlSessionFactory.setDataSource(dataSource);Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath:mapper/db1/*.xml");sqlSessionFactory.setMapperLocations(resources);// 插件对象MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();//分页插件mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));sqlSessionFactory.setPlugins(mybatisPlusInterceptor);return sqlSessionFactory.getObject();}/***  db2数据源配置* @return*/@Bean(name = "db2DataSourceProperties")@ConfigurationProperties("spring.datasource.db2")public DataSourceProperties db2DataSourceProperties() {return new DataSourceProperties();}@Bean(name = "db2DataSource")@Qualifier("db2DataSource")@ConfigurationProperties(prefix="spring.datasource.db2.hikari")public DataSource db2DataSource() {return db2DataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build();}@Bean("db2DataSourceTransactionManager")public DataSourceTransactionManager db2DataSourceTransactionManager(@Qualifier("db2DataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Bean("db2SqlSessionFactory")public SqlSessionFactory db2SqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();sqlSessionFactory.setDataSource(dataSource);Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath:mapper/db2/*.xml");sqlSessionFactory.setMapperLocations(resources);// 插件对象MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();//分页插件mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));sqlSessionFactory.setPlugins(mybatisPlusInterceptor);return sqlSessionFactory.getObject();}
}

参考链接

Spring Boot 2.7.5 HikariCP 连接池多数据源配置_hikari多数据源配置-CSDN博客

Spring Boot Reference Documentation

相关文章:

Spring Boot 2.x + Mybatis Plus 多数据源配置

MP官方文档提供有多数据源配置方案,这里没有使用其方案,原因是项目不想引入过多依赖 提供一下官网的文档供各位选择多数据源支持 | MyBatis-Plus (baomidou.com) 配置文件 application.properties文件配置两个数据源信息,yaml文件自行修改…...

2、数据库模型图、er图

关系 user和administarators是多对一的关系 user和order是一对多的关系 shipped和order是多对一的关系 order和books是多对多的关系 leavewords和order是一对一的关系 stock和books是一对多的关系 Chens 数据库表示法——ER图 Crows Foot数据库表示法——数据库模型图 Navicat表…...

Docker的理解

Docker的理解 Docker为什么用Docker?1.提升系统资源利用率2.更快速的交付和部署3.高效的部署和扩容4.更简单的管理 Docker核心技术Docker镜像Docker容器Docker仓库 Docker实现原理Linux NamespaceCgroupUnion FS Docker的应用场景1.微服务架构2.持续集成3.快速部署和…...

通信协议总结

IIC 基本特点 同步,半双工 标准100KHz,最高400KHz(IIC主要应用于低速设备) 硬件组成 需外接上拉电阻 通信过程 空闲状态 SDA和SCL都处于高电平 开始信号S和终止信号P 在数据传输过程中,当SCL0时,SDA才…...

Pinia + 组合式写法 + 选项式写法

选项式: 1.定义Store import { defineStore } from pinia// option api 选项式 export const useAlterStore defineStore(alter, {state: () > {return {num: 1}},getters: { // 可以看做是计算属性doubleCount: (state) > state.num * 2},actions: {// 同…...

vCenter-vAPI-Endpoint service health shows as Yellow

- 问题摘要:vAPI-Endpoint service health shows as Yellow - 解决方案/工作方法: 使用命令重启vAPI Endpoint service后该服务运行正常。 service-control --stop vmware-vapi-endpoint service-control --start vmware-vapi-endpoint VMware KB&…...

2018年全国大学生数学建模竞赛A题高温服装设计(含word论文和源代码资源)

文章目录 一、部分题目二、部分论文三、部分Matlab源代码问题11 求解h1h22 已知h1h2求解温度分布 问题21 求解第二层最佳厚度 四、完整word版论文和源代码(两种获取方式) 一、部分题目 2018 年高教社杯全国大学生数学建模竞赛题目 A 题 高温作业专用服…...

UEFA EURO 2024 GERMANY

UEFA EURO 2024 GERMANY 画个流程图,哈哈...

Ueditor中集成135编辑器

一、背景 在资讯项目平台运营过程中,资讯需要排版,一般都是在135编辑器排好以后,复制到平台中UEditor编辑器中,所以,他们建议集成一下135哈 二、了解135编辑器 开始调研了解135编辑器,发现人家就支持集成…...

C++ type list 模板

C 实现一个type list 模板,在编译期计算。这个type list主要有构造,列表头类型,列表尾类型,concat操作,去除列表元素重复,获取指定元素,删除指定元素的操作。实现代码贴在下面: #pr…...

vscode刷LeetCode算法题环境配置

首先,下载nodejs 在vscode中安装LeetCode插件 安装好进行配置 选择leetcode-cn 填上刚才下载node.exe的路径 完成之后重启一下vscode 重启之后登陆LeetCode 完成之后就可以看到题目了 点击 code now 就可以开始刷题了...

OpenCV报错已解决:Vector析构异常OpencvAssert CrtlsValidHeapPointer

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 在使用OpenCV进行图像处理时,我们可能会遇到Vector析构异常OpencvAssert CrtlsValidHeapPointer的问题。本文将…...

AudioLM音频生成模型

GPT-4o (OpenAI) AudioLM(Audio Language Model)是一种生成音频的深度学习模型。它可以通过学习语言模型的结构来生成连贯和高质量的音频信号。这类模型通常应用于语音合成、音乐生成和音频内容生成等领域。以下是一些与AudioLM相关的核心概念和技术细…...

Shardingsphere-Proxy 5.5.0数据迁移

Shardingsphere-Proxy 5.5.0数据迁移 Shardingsphere系列目录:背景配置集群部署搭建Zookeeper修改shardingsphere-proxy配置重启shardingsphere-proxy 执行数据迁移连接代理数据库实例(Navicate)应用代理数据库注册目标分片数据库存储单元注销…...

c语言中的for循环

在C语言中,for循环是控制结构之一,用于多次执行一段代码。其具体用法如下: 语法 for (初始化表达式; 条件表达式; 更新表达式) {// 循环体 }参数说明 初始化表达式:在循环开始前执行一次,用于初始化循环控制变量。条…...

大模型微调(finetune)方法

lora adapter prefix-tuning p-tuning prompt-tuning 大模型微调后灾难行遗忘 1、主流解决大模型微调后灾难行遗忘的方法是在微调过程中加入通用的指令数据。 2、自我蒸馏方法主要是通过模型本身对任务数据进行生成引导,构建自我蒸馏数据集,改变任务数…...

Bootstrap 5 卡片

Bootstrap 5 卡片 Bootstrap 5 是一个流行的前端框架,它提供了一套丰富的组件和工具,用于快速开发响应式和移动设备优先的网页。在 Bootstrap 5 中,卡片(Card)是一个非常重要的组件,用于展示内容,如文本、图片、列表等。卡片组件具有高度的灵活性和可定制性,可以轻松地…...

【ONLYOFFICE 8.1】的安装与使用——功能全面的 PDF 编辑器、幻灯片版式、优化电子表格的协作

🔥 个人主页:空白诗 文章目录 一、引言二、ONLYOFFICE 简介三、安装1. Windows/Mac 安装2. 文档开发者版安装安装前准备使用 Docker 安装使用 Linux 发行版安装配置 ONLYOFFICE 文档开发者版集成和开发 四、使用1. 功能全面的 PDF 编辑器PDF 查看和导航P…...

「51媒体」浙江地区媒体邀约

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体宣传加速季,100万补贴享不停,一手媒体资源,全国100城线下落地执行。详情请联系胡老师。 浙江地区的媒体邀约资源丰富多样,涵盖了电视台…...

2-18 基于matlab的关于联合对角化盲源分离算法的二阶盲识别(SOBI)算法

基于matlab的关于联合对角化盲源分离算法的二阶盲识别(SOBI)算法。通过联合对角化逼近解混矩阵。构建的四组信号,并通过认为设置添加噪声比例,掩盖信号信息。通过SOBI算法实现了解混。程序已调通,可直接运行。 2-18联合…...

Cursor实现用excel数据填充word模版的方法

cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...

C++ 设计模式 《小明的奶茶加料风波》

👨‍🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...