Spring Boot如何访问不同的数据库

news/2025/2/12 9:09:16/

        在Spring Boot应用中连接多个数据库或数据源可以使用多种方式,下面介绍两种常用的方法:

1、使用Spring Boot官方支持的多数据源配置

        spring boot提供了官方支持的多数据源配置,可以简单地配置和管理多个数据源。

        需要在application.properties文件中分别添加多个数据源的配置,并通过@Primary注解指定默认数据源。然后,通过@Configuration注解创建一个DataSourceConfig类,将多个数据源注入到该类中,并通过@Bean注解将其注册为Spring Bean。最后,在需要访问某个数据源时,直接使用@Qualifier注解指定具体的数据源即可。

application.properties文件配置:

# Primary DataSource
spring.datasource.url=jdbc:mysql://localhost:3306/db1
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# Secondary DataSource
spring.second-datasource.url=jdbc:mysql://localhost:3306/db2
spring.second-datasource.username=root
spring.second-datasource.password=root
spring.second-datasource.driver-class-name=com.mysql.cj.jdbc.Driver

DataSourceConfig类配置:

@Configuration
public class DataSourceConfig {@Primary@Bean(name = "primaryDataSource")@ConfigurationProperties(prefix="spring.datasource")public DataSource primaryDataSource() {return DataSourceBuilder.create().build();}@Bean(name = "secondDataSource")@ConfigurationProperties(prefix="spring.second-datasource")public DataSource secondDataSource() {return DataSourceBuilder.create().build();}
}

在需要访问某个数据源时,直接使用@Qualifier注解指定具体的数据源即可,例如:

@Service
public class UserServiceImpl implements UserService {@Autowired@Qualifier("primaryDataSource")private DataSource primaryDataSource;@Autowired@Qualifier("secondDataSource")private DataSource secondDataSource;// ...
}

2、使用第三方库实现多数据源(本次使用Druid连接池)

        除了使用spring boot官方支持的多数据源配置,也可以使用一些开源的第三方库来实现多数据源的配置。 

        例如,使用HikariCP、Druid等连接池,通过手动配置多个数据源并将其注入到Spring容器中,实现对多个数据源的访问。同时,也可以通过AOP等方式来实现动态切换数据源的功能,从而更加灵活地管理多个数据源。

application.properties文件配置:

# Primary DataSource
jdbc.primary.url=jdbc:mysql://localhost:3306/db1
jdbc.primary.username=root
jdbc.primary.password=root
jdbc.primary.driver-class-name=com.mysql.cj.jdbc.Driver# Secondary DataSource
jdbc.second.url=jdbc:mysql://localhost:3306/db2
jdbc.second.username=root
jdbc.second.password=root
jdbc.second.driver-class-name=com.mysql.cj.jdbc.Driver

DataSourceConfig类配置:

@Configuration
public class DataSourceConfig {@Bean(name = "primaryDataSource")@ConfigurationProperties(prefix="jdbc.primary")public DataSource primaryDataSource() {return new DruidDataSource();}@Bean(name = "secondDataSource")@ConfigurationProperties(prefix="jdbc.second")public DataSource secondDataSource() {return new DruidDataSource();}
}

在需要访问某个数据源时,可以通过@Qualifier注解指定具体的数据源,例如:

@Service
public class UserServiceImpl implements UserService {@Autowired@Qualifier("primaryDataSource")private DataSource primaryDataSource;@Autowired@Qualifier("secondDataSource")private DataSource secondDataSource;// ...
}

        需要注意的是,在使用多个数据源时,需要确保每个数据源的配置信息正确,避免出现连接错误或者数据冲突等问题。同时,也需要考虑事务管理、数据同步等问题,以保证多个数据源之间的数据一致性。 

 

 

 

 

 


http://www.ppmy.cn/news/1015053.html

相关文章

【Linux】公网环境下Ubuntu系统SSH远程树莓派

前言 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于恒川的日常汇报系列,大家有兴趣的可以看一看 📘相关专栏C语言初…

代码随想录训练营一刷总结

代码随想录训练营一刷总结 一、数组 四类经典题目:二分法、双指针法、滑动窗口、模拟行为。 二、链表 经典题目:虚拟头结点、链表的基本操作、反转链表、删除倒数第N个节点、链表相交、环形链表。 三、哈希表 希表都是用来快速判断一个元素是否出现…

使用Python + Flask搭建web服务

示例脚本 from flask import Flask# 获取一个实例对象 app Flask(__name__)# 1、注册 app.route(/reg, methods[get]) def reg():return {code: 200,msg: reg ok!}# 2、登录 app.route(/login, methods[get]) def login():return login ok!if __name__ __main__:…

opencv基础-33 图像平滑处理-中值滤波cv2.medianBlur()

中值滤波是一种常见的图像处理滤波技术,用于去除图像中的噪声。它的原理是用一个滑动窗口(也称为卷积核)在图像上移动,对窗口中的像素值进行排序,然后用窗口中像素值的中值来替换中心像素的值。这样,中值滤…

安全防御(3)

1.总结当堂NAT与双机热备原理,形成思维导图 2.完成课堂nat与双机热备试验 引用IDS是指入侵检测系统,它可以在网络中检测和防御入侵行为。IDS的签名是指根据已知入侵行为的特征制定的规则,用于检测和警告可能存在的入侵行为。签名过滤器可以根…

可解释性分析的一些类别(草稿)(视觉)

目录 1.交互性解释 2. 本身具有解释性的模型 3.如何将可解释性分析应用到生成模型 参考文献 视觉领域从2020年开始可以分为两块,一个是图像分类,一个是图像生成。 图像分类:输入一张图片,输出语义标签,就是这张图…

激活函数总结(一):ReLU及其变体

激活函数总结(一) 1 引言2 常用激活函数介绍2.1 Sigmoid激活函数2.2 Tanh激活函数2.3 ReLU激活函数2.4 Leaky ReLU激活函数2.5 Parametric ReLU(PReLU)激活函数2.6 Swish激活函数 3. 总结 总结的激活函数都在目录中有所展示&#…

QEMU源码全解析30 —— QEMU/KVM API 使用实例

本文内容参考: 《QEMU/KVM》源码解析与应用 —— 李强,机械工业出版社 特此致谢! 在本系列之前文章中,讲解了QEMU参数解析、QEMU Module(模块)、并且花了大力气(十几篇文章)重点讲…