SpringBoot实现多数据源配置

article/2025/9/30 22:45:47
😊 @ 作者: 一恍过去
💖 @ 主页: https://blog.csdn.net/zhuocailing3390
🎊 @ 社区: Java技术栈交流
🎉 @ 主题: SpringBoot实现多数据源配置
⏱️ @ 创作时间: 2022年06月13日

目录

  • 前言
  • 1、创建数据库(表)
  • 2、yaml配置
  • 3、数据源配置
  • 4、mappering
  • 5、mapper
  • 6、controllrt
  • 7、目录结构
  • 8、注意事项
  • 9、测试

在这里插入图片描述

前言

多数据源是一种常见的技术需求,它允许应用程序连接和操作多个不同的数据库或数据源。

使用该方式配置数据源就是,将连接不同数据的Mapper有Mapping文件放到不同的目录下,在配置DataSource进行手动指定,使用时通过不同目录的Mapper访问不同的数据库连接,达到多数据源配置的目的;

1、创建数据库(表)

分别在mysql中创建两个库:systemlog,并且创建对应的表(根据项目实际情况的定),如下:

在这里插入图片描述

2、yaml配置

spring:application:name: quartzdatasource:# 数据源一system:driverClassName: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://127.0.0.1:3307/system?useUnicode=true&useSSL=false&zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghaiusername: rootpassword: lhzlx# 数据源二log:driverClassName: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://127.0.0.1:3307/log?useUnicode=true&useSSL=false&zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghaiusername: rootpassword: lhzlx# hikari连接池type: com.zaxxer.hikari.HikariDataSourcehikari:#最大连接数,小于等于0会被重置为默认值10;大于零小于1会被重置为minimum-idle的值maximum-pool-size: 10#最小空闲连接,默认值 10,小于0或大于maximum-pool-size,都会重置为maximum-pool-sizeminimum-idle: 2#连接超时时间:毫秒,小于250毫秒,否则被重置为默认值30秒connection-timeout: 60000#空闲连接超时时间,默认值600000ms(10分钟),大于等于max-lifetime且max-lifetime>0,会被重置为0;#不等于0且小于10秒,会被重置为10秒。#只有空闲连接数大于最大连接数且空闲时间超过该值,才会被释放(自动释放过期链接)idle-timeout: 600000#连接最大存活时间.不等于0且小于30秒,会被重置为默认值30分钟.设置应该比mysql设置的超时时间短max-lifetime: 640000#连接测试查询connection-test-query: SELECT 1#mapper 别名扫描
mybatis:type-aliases-package: com.lhz.demo.model.entity#数据库类型configuration.database-id: mysql#自动驼峰转换configuration.map-underscore-to-camel-case: true

注意: 在使用hikari作为连接池时,如果配置多数据源需要将url修改为jdbc-url,使用druid作为连接池则不需要修改;否则会出现jdbcUrl is required with driverClassName错误;

3、数据源配置

配置LogDataSourceConfigSystemDataSourceConfig

@MapperScan(basePackages = "com.lhz.demo.mapper.system", sqlSessionFactoryRef = "systemSqlSessionFactory")
@Configuration
public class SystemDataSourceConfig {//  @Primary :默认数据源@Primary@Bean("systemDataSource")// yaml文件中配置的数据源前缀@ConfigurationProperties(prefix = "spring.datasource.system")public DataSource getSystemDataSource(){return DataSourceBuilder.create().build();}@Primary@Bean("systemSqlSessionFactory")public SqlSessionFactory systemSqlSessionFactory(@Qualifier("systemDataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);// 配置mapping所在目录bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mappers/system/*.xml"));return bean.getObject();}@Primary@Bean("systemSqlSessionTemplate")public SqlSessionTemplate systemSqlSessionTemplate(@Qualifier("systemSqlSessionFactory") SqlSessionFactory sqlSessionFactory){return new SqlSessionTemplate(sqlSessionFactory);}
}
@Configuration
@MapperScan(basePackages = "com.lhz.demo.mapper.log", sqlSessionFactoryRef = "logSqlSessionFactory")
public class LogDataSourceConfig {@Bean("logDataSource")// yaml文件中配置的数据源前缀@ConfigurationProperties(prefix = "spring.datasource.log")public DataSource getLogDataSource(){return DataSourceBuilder.create().build();}@Bean("logSqlSessionFactory")public SqlSessionFactory logSqlSessionFactory(@Qualifier("logDataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);// 配置mapping所在目录bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mappers/log/*.xml"));return bean.getObject();}@Bean("logSqlSessionTemplate")public SqlSessionTemplate logSqlSessionTemplate(@Qualifier("logSqlSessionFactory") SqlSessionFactory sqlSessionFactory){return new SqlSessionTemplate(sqlSessionFactory);}
}

4、mappering

resources/mappers/log目录下创建LogMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lhz.demo.mapper.log.LogMapper"><select id="selectAll" resultType="com.lhz.demo.model.entity.TbLog">select * from tb_log</select>
</mapper>

resources/mappers/system目录下创建SystemMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lhz.demo.mapper.system.SysMapper"><select id="selectAll" resultType="com.lhz.demo.model.entity.TbSystem">select * from tb_system</select>
</mapper>

在这里插入图片描述

5、mapper

com.lhz.demo.mapper.log目录下创建LogMapper

@Mapper
public interface LogMapper {List<TbLog> selectAll();
}

com.lhz.demo.mapper.system目录下创建SystemMapper

@Mapper
public interface SysMapper {List<TbSystem> selectAll();
}

6、controllrt

@RestController
@RequestMapping("/test")
@Slf4j
public class TestController {@Resourceprivate SysMapper sysMapper;@Resourceprivate LogMapper logMapper;/*** 查询system库* @return*/@GetMapping("/sys")public Object sys() {return sysMapper.selectAll();}/*** 查询log库* @return*/@GetMapping("/log")public Object log() {return logMapper.selectAll();}
}

7、目录结构

在这里插入图片描述

8、注意事项

在使用hikari作为连接池时,如果配置多数据源需要将url修改为jdbc-url,使用druid作为连接池则不需要修改;否则会出现jdbcUrl is required with driverClassName错误;

9、测试

启动项目分别访问http://localhost:9090/test/syshttp://localhost:9090/test/log均有数据输出,则表示配置成功;
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


http://chatgpt.dhexx.cn/article/7hs2LFIA.shtml

相关文章

SAP 数据源

SAP BW或者BI作为数据仓库会抽取SAP系统数据和非SAP系统数据&#xff0c;源系统的主要类型有以下几种&#xff1a; 1、SAP系统&#xff1a;R/3、S/4、CRM、等&#xff0c; 2、文本文件&#xff1a;将数据库转化为XML或者CSV文件放在FTP上&#xff0c;然后去读取数据&#xf…

Python使用tsne进行高维数据可视化实战:二维可视化、三维可视化

Python使用tsne进行高维数据可视化实战:二维可视化、三维可视化 # 绘制二维可视化图像并添加标签字符函数 def plot_embedding(data, label, title):x_min, x_max = np.min(data, 0), np.max(data, 0)data = (data - x_min) / (x_max - x_min)fig = plt.figure()ax = plt.s…

降维算法PCA的应用----高维数据的可视化

文章目录 序言废话不多说看代码导入相关模块数据提取降维降维后数据信息展示新的特征矩阵 可视化关于X_dim2[yi, 0]的解释 总结 序言 当我们拿到一堆数据的时候&#xff0c;几乎不可能通过我们的肉眼分辨出数据的分布情况&#xff0c;这时候就想要通过图展示数据的分布&#x…

学习笔记 | 用距离之距离(DoD)变换改进高维数据可视化

文章目录 一、论文关键信息二、主要内容三、总结CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、论文关键信息 论文标题:Improved visualization of high-dimensional data using the distance-of-distance transformation 论文地址:https://doi.org/10.1371/journal.…

数据可视化的历史

数据可视化的历史 可视化发展史与测量、绘画、人类现代文明的启蒙和科技的发展一脉相承。在地图、科学与工程制图、统计图表中&#xff0c;可视化理念与技术已经应用和发展了数百年。 17世纪之前&#xff1a;图表萌芽 16世纪时&#xff0c;人类已经掌握了精确的观测技术和设…

【数据可视化】复杂高维多元数据的可视化

1 高维多元数据 每个数据对象有两个或两个以上独立或者相关属性的数据。高维指数据具有多个独立属性&#xff0c;多元指数据具有多个相关属性。由于研究者在很多情况下不确定数据的属性是否独立&#xff0c;因此通常简单地称之为多元数据。例如&#xff1a;电脑配置。 高维多元…

平行坐标图:高维数据可视化必备图形

关于数据可视化&#xff0c;我们之前分享过很多基础图表和进阶图表&#xff0c;都是一些我们常见的图表&#xff0c;如折线图&#xff0c;柱状图&#xff0c;饼图等等。今天分享一个大家应该见过但是不那么熟悉的图表-平行坐标图。 平行坐标图的定义 平行坐标图可以说是折线图…

Umap高维数据可视化与降维

Umap解决高维数据可视化的问题&#xff0c;以及高效降维。 Umap地址:https://github.com/lmcinnes/umap 文档地址&#xff1a;UMAP: Uniform Manifold Approximation and Projection for Dimension Reduction — umap 0.5 documentation 1.pip通过清华镜像安装方式&#xff…

【数据艺术科技1】基于pyhon的高维数据可视化。(1、2维)

引言 描述性分析是与数据科学项目甚至特定研究相关的任何分析生命周期的核心组成部分之一。数据聚合、汇总和可视化是支持这一数据分析领域的一些主要支柱。从传统商业智能时代到如今的人工智能时代&#xff0c;数据可视化一直是一种强大的工具&#xff0c;并因其在提取正确信…

python高维数据可视化_【机器学习】(十六)主成分分析PCA:高维数据可视化、特征提取...

主成分分析(PCA)是一种旋转数据集的方法,旋转后的特征在统计上不相关。 用PCA做数据变换 首先,算法在原始数据点集中,找到方差最大的方向(包含最多信息),标记为‘成分1’。->找到与“成分1”正交(成直角)且包含最多信息的方向,标记为“成分2”。利用这一过程找到的方向…

TSNE 高维数据可视化

TSNE 高维数据可视化 标签&#xff1a; python 机器学习 神经网络 在神经网络中&#xff0c;我们最后一层一般都是高纬度的数据&#xff0c;但是有时候我们可能想看一下这些高纬度数据的分布情况&#xff0c;这个时候就需要用TSNE&#xff0c;其实TSNE本质上就是先利用PCA降维…

PCA实现高维数据可视化

1 简介 PCA&#xff08;Principal Component Analysis&#xff09;即主成分分析是最常见的降维方法&#xff0c; 它是一种统计方法。用于高维数据集的探索与可视化&#xff0c;还可用于数据的压缩和预处理。可通过正交变换把具有相关性的高维变量转换为线性无关的低维变量&…

高维数据可视化之t-SNE算法

https://blog.csdn.net/hustqb/article/details/78144384 t-sne数学原理https://zhuanlan.zhihu.com/p/57937096 什么是t-SNE&#xff1f; t-SNE的主要用途是可视化和探索高维数据。 它由Laurens van der Maatens和Geoffrey Hinton在JMLR第九卷(2008年)中开发并出版。 t-SNE…

Python 数据可视化学习笔记 之高维数据可视化及其方法

一、高维数据 高维数据泛指高维&#xff08;multidimensional&#xff09; 和多变量&#xff08;multivariate&#xff09;数据 -- 高维是指数据具有多个独立属性 -- 多变量是指数据具有多个相关属性 高维数据可视化的挑战&#xff1a; 如何呈现单个数据点的各属性的数据值分…

高维数据可视化示例

高维数据可视化示例 文中代码均在Jupyter Notebook中运行 文中所需两个数据文件在下面给出。 文中数据集下载1 文中数据集下载2 目录 高维数据可视化示例单变量分析多变量分析可视化二维数据可视化三维数据可视化四维数据可视化 5 维数据可视化 6 维数据&#xff08;6-D&#…

python科学计算库安装

python科学计算相关的库包括numpy&#xff0c;scipy&#xff0c;matplotlib等&#xff0c;但是自己安装比较不容易&#xff0c;倒不是安装过程有多难&#xff0c;而是会出现各种各样的问题&#xff0c;现在做一记录 安装顺序numpy -> scipy - > matplotlib&#xff0c; …

python怎么进行计算_python怎么计算

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 下面是python中的一个函数计算代码:loops=25000000 from math import*a=range(1,loops)def f(x):return 3*cos(x)+4*sin(x)**2%timeit r=(f(x) for x in a)效率…

Python科学计算初探——余弦相似度

SciPy是世界上著名的Python开源科学计算库&#xff0c;建立在Numpy之上。它增加的功能包括数值积分、最优化、统计和一些专用函数。例如线性代数、常微分方程数值求解、信号处理、图像处理、稀疏矩阵等等。 安装科学计算包SciPy 由于SciPy库在Windows下使用pip intall安装失败…

【python科学计算发行版】

python科学计算发行版 python是科学计算的有力工具&#xff0c;但在进行计算过程中需要安装很多依赖包&#xff0c;会对使用造成不便&#xff0c;所以总结了一下几个包含丰富科学计算包的python发行版本供参考。 Windows下使用的Winpython著名的计算集合python(x,y)数据科学平…

Python科学计算pdf

下载地址&#xff1a;网盘下载 内容简介 编辑 本书介绍如何用Python开发科学计算的应用程序&#xff0c;除了介绍数值计算之外&#xff0c;还着重介绍如何制作交互式的2D、3D图像&#xff0c;如何设计精巧的程序界面&#xff0c;如何与C语言编写的高速计算程序结合&#xff0c;…