Spring Boot 配置双数据源

Spring Boot 配置双数据源

  • 目录
    • 概述
      • 需求:
    • 设计思路
    • 实现思路分析
      • 1.基本步骤
      • 2.实例
  • 参考资料和推荐阅读

Survive by day and develop by night.
talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.
happy for hardess to solve denpendies.

目录

在这里插入图片描述

概述

需求:

设计思路

实现思路分析

1.基本步骤

    1. 添加依赖
    • 添加 Spring Boot 和数据库驱动的依赖
    1. 配置数据源
    • 在 application.properties 或 application.yml 中分别配置两个数据源的连接信息
    1. 创建数据源配置类
    • 创建两个数据源的配置类,分别配置数据源相关信息
    1. 配置数据源事务管理器
    • 创建两个数据源的事务管理器,并指定数据源
    1. 配置 JPA 实体管理器工厂
    • 创建两个 JPA 实体管理器工厂,并指定数据源和配置信息
    1. 配置事务注解支持
    • 启用事务注解支持,并指定事务管理器
    1. 在 DAO 层使用数据源
    • 使用 @Qualifier 注解指定使用的数据源
    1. 测试双数据源配置
    • 编写测试代码,分别使用两个数据源进行数据库操作

2.实例

在Spring Boot中配置双数据源可以使用多个方法,下面介绍其中的一种方法。

  1. 引入相关依赖

首先在pom.xml文件中引入Spring Boot和数据库连接池的依赖。例如,使用MySQL和H2数据库,可以添加以下依赖:

<dependencies><!-- Spring Boot --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MySQL --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- H2 --><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency>
</dependencies>
  1. 配置数据源

application.properties文件中配置两个数据源的属性,例如:

# MySQL 数据源配置
spring.datasource.mysql.url=jdbc:mysql://localhost:3306/db1
spring.datasource.mysql.username=root
spring.datasource.mysql.password=123456
spring.datasource.mysql.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.mysql.tomcat.max-wait=10000# H2 数据源配置
spring.datasource.h2.url=jdbc:h2:mem:db2
spring.datasource.h2.username=sa
spring.datasource.h2.password=
spring.datasource.h2.driver-class-name=org.h2.Driver
spring.datasource.h2.tomcat.max-wait=10000
  1. 配置数据源对象

创建两个数据源对象,用于连接数据库。可以使用@Configuration注解和@Bean注解来实现。例如:

@Configuration
public class DataSourceConfig {@Bean(name = "mysqlDataSource")@ConfigurationProperties(prefix = "spring.datasource.mysql")public DataSource mysqlDataSource() {return DataSourceBuilder.create().build();}@Bean(name = "h2DataSource")@ConfigurationProperties(prefix = "spring.datasource.h2")public DataSource h2DataSource() {return DataSourceBuilder.create().build();}
}
  1. 配置JdbcTemplate对象

创建两个JdbcTemplate对象,用于执行SQL语句。可以使用@Autowired注解来实现。例如:

@Configuration
public class JdbcTemplateConfig {@Autowired@Qualifier("mysqlDataSource")private DataSource mysqlDataSource;@Autowired@Qualifier("h2DataSource")private DataSource h2DataSource;@Bean(name = "mysqlJdbcTemplate")public JdbcTemplate mysqlJdbcTemplate() {return new JdbcTemplate(mysqlDataSource);}@Bean(name = "h2JdbcTemplate")public JdbcTemplate h2JdbcTemplate() {return new JdbcTemplate(h2DataSource);}
}
  1. 使用JdbcTemplate对象

在代码中使用JdbcTemplate对象来执行SQL语句。可以使用@Autowired注解来实现。例如:

@RestController
public class UserController {@Autowired@Qualifier("mysqlJdbcTemplate")private JdbcTemplate mysqlJdbcTemplate;@Autowired@Qualifier("h2JdbcTemplate")private JdbcTemplate h2JdbcTemplate;@GetMapping("/users")public List<User> getUsers() {List<User> users = new ArrayList<>();// 使用mysqlJdbcTemplate执行SQL语句mysqlJdbcTemplate.query("SELECT * FROM users", (rs, rowNum) -> {User user = new User();user.setId(rs.getInt("id"));user.setName(rs.getString("name"));users.add(user);return null;});// 使用h2JdbcTemplate执行SQL语句h2JdbcTemplate.query("SELECT * FROM users", (rs, rowNum) -> {User user = new User();user.setId(rs.getInt("id"));user.setName(rs.getString("name"));users.add(user);return null;});return users;}
}

以上就是在Spring Boot中配置双数据源的基本步骤。配置完成后,就可以使用两个数据源执行不同的SQL语句了。

参考资料和推荐阅读

参考资料
官方文档
开源社区
博客文章
书籍推荐

  1. https://blog.csdn.net/Stranger_Orz/article/details/122081492
  2. https://blog.csdn.net/qq_42666609/article/details/130221136
  3. https://blog.csdn.net/kk12927/article/details/106222483/

欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!同时,期望各位大佬的批评指正~,如果有兴趣,可以加文末的交流群,大家一起进步哈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/242787.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 统计API接口用时该使用过滤器还是拦截器?

统计请求的处理时间&#xff08;用时&#xff09;既可以使用 Servlet 过滤器&#xff08;Filter&#xff09;&#xff0c;也可以使用 Spring 拦截器&#xff08;Interceptor&#xff09;。两者都可以在请求处理前后插入自定义逻辑&#xff0c;从而实现对请求响应时间的统计。 …

一个简单的ETCD GUI工具

使用ETCD没有好用的GUI工具&#xff0c;随手用c#写了一个&#xff0c; 做得好玩的一个ETCD GUI工具&#xff0c;后面加上CLI 工具&#xff0c;类似于 redis Cli工具一样&#xff0c;简化在 Linux下面的操作&#xff0c;不知道有没有必要&#xff0c; git 地址如下&#xff0c;…

【AI】小白入门笔记

前言 2024年&#xff0c;愿新年胜旧年&#xff01;作为AI世界的小白&#xff0c;今天先来从一些概念讲起&#xff0c;希望路过的朋友们多多指教&#xff01; 正文 AI (人工智能) 提起AI, 大家可能会想起各种机器人&#xff0c;移动手机的“Siri”,"小爱同学", 是语…

翻译: Anaconda 与 miniconda的区别

Anaconda 和 miniconda 是广泛用于数据科学的软件发行版&#xff0c;用于简化包管理和部署。 1. 主要有两个区别&#xff1a; packages包数量&#xff1a; Anaconda 附带了 150 多个数据科学包&#xff0c;而 miniconda 只有少数几个。Interface接口&#xff1a;Anaconda 有…

中仕教育:研究生毕业可以考选调生吗?

选调生的报考条件之一是应届生&#xff0c;研究生毕业也属于应届生&#xff0c;所以是可以报考的。 选调生不同学历的年龄限制&#xff1a; 1.应届本科生&#xff1a;年龄在25岁以内 2.应届研究生&#xff1a;年龄在30岁以内 3.应届博士生&#xff1a;年龄在35岁以内 研究…

Elasticsearch8 集群搭建(二)配置篇:(1)节点和集群配置

安装完Elasticsearch后&#xff0c;需要对其进行配置&#xff0c;包括以下几部分&#xff1a;节点和集群配置、系统配置、安全配置。 此篇记录节点和集群配置的内容&#xff0c;后续将更新系统配置和安全配置。 节点和集群配置&#xff1a; 通过编辑/usr/local/elasticsearc…

【Oracle】收集Oracle数据库内存相关的信息

文章目录 【Oracle】收集Oracle数据库内存相关的信息收集Oracle数据库内存命令例各命令的解释输出结果例参考 【声明】文章仅供学习交流&#xff0c;观点代表个人&#xff0c;与任何公司无关。 编辑|SQL和数据库技术(ID:SQLplusDB) 【Oracle】收集Oracle数据库内存相关的信息 …

力扣刷MySQL-第三弹(详细讲解)

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;力扣刷题讲解-MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出…

Find My相机|苹果Find My技术与相机结合,智能防丢,全球定位

相机是一种利用光学成像原理形成影像并使用底片记录影像的设备&#xff0c;是用于摄影的光学器械。相机让我们能够记录下美丽的风景和珍贵的时刻。当我们到达一个迷人的地方,或者经历了一个特别难忘的时刻时,我们可以使用照相机来拍摄照片,记录下这些美好的回忆。照相机可以帮助…

[学习笔记]刘知远团队大模型技术与交叉应用L3-Transformer_and_PLMs

RNN存在信息瓶颈的问题。 注意力机制的核心就是在decoder的每一步&#xff0c;都把encoder的所有向量提供给decoder模型。 具体的例子 先获得encoder隐向量的一个注意力分数。 注意力机制的各种变体 一&#xff1a;直接点积 二&#xff1a;中间乘以一个矩阵 三&#xff1a;…

如何使用最新版Xmind打开mmap格式文件

下载MindManager又要钱&#xff0c;百度脑图又点不开脑图笔记中夹杂的文件和图片&#xff0c;下载一个Xmind来查看即可。 1.新建一个Xmind导图 2.导入已经下载好的mmap格式文件&#xff1a; 3. 自己选择那个文件即可&#xff1a; 4. 然后检查没问题&#xff0c;保存成xmind格式…

蓝桥杯、编程考级、NOC、全国青少年信息素养大赛—scratch列表考点

1、小小情报员&#xff08;202309scratch四级24题&#xff09; 1.准备工作 &#xff08;1&#xff09;选择背景 Colorful City&#xff1b; &#xff08;2&#xff09;保留角色小猫&#xff0c;选择角色Ballerina。 2.功能实现 &#xff08;1&#xff09;角色小猫初始位置…

【论文阅读】Relation-Aware Graph Transformer for SQL-to-Text Generation

Relation-Aware Graph Transformer for SQL-to-Text Generation Abstract SQL2Text 是一项将 SQL 查询映射到相应的自然语言问题的任务。之前的工作将 SQL 表示为稀疏图&#xff0c;并利用 graph-to-sequence 模型来生成问题&#xff0c;其中每个节点只能与 k 跳节点通信。由…

【SpringBoot】SpringBoot 项目初始化方法

github 搜索 springboot 模板 github 搜索 springboot 模板&#xff0c;拉取现成代码。 SpringBoot 官方的模板生成器 SpringBoot 官方的模板生成器&#xff08;https://start.spring.io/&#xff09; 在 IDEA 开发工具中生成 这里我修改成阿里的镜像主要是要使用 Java8。 …

专业137总分439东南大学920专业基础综合考研经验电子信息与通信电路系统芯片

我本科是南京信息工程大学&#xff0c;今年报考东南大学信息学院&#xff0c;成功逆袭&#xff0c;专业137&#xff0c;政治69&#xff0c;英语86&#xff0c;数一147&#xff0c;总分439。以下总结了自己的复习心得和经验&#xff0c;希望对大家复习有一点帮助。啰嗦一句&…

ROS建模:一起从零手写URDF模型

1、机器人的定义与组成 2、URDF建模方法 link的描述部分&#xff1a; 其中geometry中参数origin的xyz单位为: m&#xff0c;其描述的是相对于坐标系的平移变换&#xff1b; rpy单位为&#xff1a;弧度&#xff0c;其描述的是相对于坐标系下的旋转偏移 collision是指碰撞属性…

深度探讨 Golang 中并发发送 HTTP 请求的最佳技术

目录 推荐 使用 Goroutines 的基本方法 Goroutine 入门 处理多个请求 并发 HTTP 请求的方法 基本 Goroutine WaitGroup Channels Worker Pools 使用通道限制 Goroutine 使用信号量限制 Goroutines 那么&#xff0c;最好的方法是什么&#xff1f; 评估你的需求 错误…

DevOps系列文章之 GitLab CI/CD

CICD是什么? 由于目前公司使用的gitlab&#xff0c;大部分项目使用的CICD是gitlab的CICD&#xff0c;少部分用的是jenkins&#xff0c;使用了gitlab-ci一段时间后感觉还不错&#xff0c;因此总结一下 介绍gitlab的CICD之前&#xff0c;可以先了解CICD是什么 我们的开发模式…

algotithm -- 排序算法

排序算法总结表&#xff1a; 1. In-place 和 Out-place 含义 参考链接 in-place 占用常数内存&#xff0c;不占用额外内存 假如问题规模是n&#xff0c;在解决问题过程中&#xff0c;只开辟了常数量的空间&#xff0c;与n无关&#xff0c;这是原址操作&#xff0c;就是In-…

安卓平板局域网内远程控制工控机方法

安卓平板局域网内远程控制工控机方法 将所需要远程控制的工控机通过网线连接到具有WiFi功能的路由器上&#xff0c;将安卓平板连接上WiFi&#xff0c;如下图所示 下载NoMachine远程软件安装包&#xff0c;官网地址&#xff1a;https://www.nomachine.com/ 点击Download now按钮…