Java中配置两个r2db连接不同的数据库

在实际项目中不可避免的存在使用两个数据库的情况,下面将系统地讲解相关配置方案,包含配置文件、数据库配置类、注解原理、常见错误排查等维度

🧩 一、配置文件说明(application.yml)

spring:r2dbc:url: r2dbc:pool:postgresql://localhost:5432/db1username: user1password: pass1pool:initial-size: 5max-size: 20secondary:r2dbc:url: r2dbc:postgresql://localhost:5432/your_dbusername: your_userpassword: your_passwordpool:initial-size: 3max-size: 15

🔍 说明

  • spring.r2dbc: Spring Boot 默认加载的主数据源配置。
  • secondary.r2dbc: 自定义的第二数据源。不会自动装配,需要你手动配置 Bean。
  • r2dbc:pool: 和 r2dbc: 区别:
    • r2dbc:pool: 表示使用 连接池(推荐)
    • r2dbc: 表示原始的非连接池驱动

⚙️ 二、主数据源配置类 PrimaryDatabaseConfig

@Configuration
public class PrimaryDatabaseConfig {@Value("${spring.r2dbc.url}")private String url;@Value("${spring.r2dbc.username}")private String username;@Value("${spring.r2dbc.password}")private String password;@Primary@Bean(name = "primaryConnectionFactory")public ConnectionFactory primaryConnectionFactory() {return ConnectionFactories.get(ConnectionFactoryOptions.parse(url).mutate().option(ConnectionFactoryOptions.USER, username).option(ConnectionFactoryOptions.PASSWORD, password).build());}@Primary@Bean(name = "primaryTemplate")public R2dbcEntityTemplate primaryTemplate(@Qualifier("primaryConnectionFactory") ConnectionFactory connectionFactory) {return new R2dbcEntityTemplate(connectionFactory);}
}

✅ 核心点

  • @Primary: 表示这个是默认优先注入的 Bean。在有多个候选 Bean 时,优先使用这个。
  • ConnectionFactory: R2DBC 中类似 JDBC 的 DataSource。
  • R2dbcEntityTemplate: 相当于 JdbcTemplate,提供操作数据库的工具类(基于反应式编程)。

⚙️ 三、第二数据源配置类 SecondaryDatabaseConfig

@Configuration
public class SecondaryDatabaseConfig {@Value("${secondary.r2dbc.url}")private String url;@Value("${secondary.r2dbc.username}")private String username;@Value("${secondary.r2dbc.password}")private String password;@Bean(name = "secondaryConnectionFactory")public ConnectionFactory secondaryConnectionFactory() {return ConnectionFactories.get(ConnectionFactoryOptions.parse(url).mutate().option(ConnectionFactoryOptions.USER, username).option(ConnectionFactoryOptions.PASSWORD, password).build());}@Bean(name = "secondaryTemplate")public R2dbcEntityTemplate secondaryTemplate(@Qualifier("secondaryConnectionFactory") ConnectionFactory connectionFactory) {return new R2dbcEntityTemplate(connectionFactory);}
}

✅ 核心点

  • 没有 @Primary,所以必须使用 @Qualifier(“secondaryTemplate”) 指定注入
  • 路径读取的是 secondary.r2dbc.xxx,需要明确在配置文件中写对。

🧪 四、使用方式示例

@Service
public class MyService {private final R2dbcEntityTemplate primaryTemplate;private final R2dbcEntityTemplate secondaryTemplate;public MyService(@Qualifier("primaryTemplate") R2dbcEntityTemplate primaryTemplate,@Qualifier("secondaryTemplate") R2dbcEntityTemplate secondaryTemplate) {this.primaryTemplate = primaryTemplate;this.secondaryTemplate = secondaryTemplate;}public Mono<Void> test() {return primaryTemplate.getDatabaseClient().sql("SELECT 1").fetch().rowsUpdated().then(secondaryTemplate.getDatabaseClient().sql("SELECT 2").fetch().rowsUpdated()).then();}
}

🚫 常见错误排查

问题描述原因解决方法
@Qualifier("secondaryTemplate") 提示找不到Spring 容器未识别 Bean 名称确保 @Bean(name = "...") 名称一致
primaryTemplatesecondaryTemplate 互相冲突缺失 @Primary给默认数据源添加 @Primary
自动装配失败R2dbcEntityTemplate 没有显式注入必须手动注册多个数据源对应的 R2dbcEntityTemplate
ConnectionFactories.get() 报错URL 配置错误或缺失驱动检查 url 格式是否是 r2dbc:postgresql:,并确保依赖添加了 R2DBC Postgres 驱动

📦 五、依赖配置

确保你添加了以下依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-r2dbc</artifactId>
</dependency><dependency><groupId>io.r2dbc</groupId><artifactId>r2dbc-postgresql</artifactId>
</dependency><!-- 可选:连接池支持 -->
<dependency><groupId>io.r2dbc</groupId><artifactId>r2dbc-pool</artifactId>
</dependency>

🧠 小贴士

  • ConnectionFactoryOptions.parse() 用于解析字符串并构建连接选项,可组合 .mutate() 来动态设置用户名和密码。

  • 推荐使用 r2dbc:pool:postgresql,避免创建太多连接。

  • 如果你需要统一管理多个 R2dbcEntityTemplate,可封装一个工具类或注入 Map<String, R2dbcEntityTemplate>

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

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

相关文章

Swagger 配置及使用指南

Spring Boot 项目集成 Swagger 配置及使用指南 一、Swagger 简介 Swagger 是一个用于设计、构建、文档化和使用 RESTful API 的框架。通过集成 Swagger&#xff0c;开发者可以&#xff1a; 自动生成实时 API 文档直接在浏览器中测试 API 接口减少手动编写文档的工作量支持团队协…

什么是缓存雪崩?缓存击穿?缓存穿透?分别如何解决?什么是缓存预热?

缓存雪崩&#xff1a;在一个时间段内&#xff0c;有大量的key过期&#xff0c;或者Redis服务宕机&#xff0c;导致大量的请求到达数据库,带来巨大压力- 给key设置不同的TTL、利用Redis集群提高服务的高可用性、添加多级缓存、添加降级流策略缓存击穿&#xff1a;给某一个key设置…

图像预处理 二

目录 1. 插值方法 1.1 最近邻插值 1.2 双线性插值 1.3 像素区域插值 1.4 双三次插值 1.5 Lanczos插值 1.6 小结 2. 图像掩膜 2.1 制作掩膜 2.2 与运算 2.3 颜色替换 2.3.1 制作掩膜 2.3.2 颜色替换 2.4 图像掩膜代码 3. 图像添加水印 3.1 模板输入 3.2 与运算 3…

1.Java发展简史与设计哲学

目录引言一、生活里到处都是 Java1.1 Java 在生活中的小例子1.2 Java 的核心应用场景二、Java 是咋诞生的&#xff0c;又有啥核心设计思想2.1 Java 的发展历程2.2 Java 的三大设计哲学2.3 Java 哲学给行业带来的变革三、为啥大家都选 Java 呢3.1 和其他主流编程语言对比的优势3…

基于粒子群算法优化高斯过程回归(PSO-GPR)的多输出回归

基于粒子群算法优化高斯过程回归(PSO-GPR)的多输出回归 使用粒子群优化算法(PSO)优化高斯过程回归(GPR)模型,解决多输入多输出(MIMO)回归问题。该模型能够同时预测多个相关输出变量。 %% 基于粒子群算法优化高斯过程回归(PSO-GPR)的多输出回归 % 作者: MATLAB技术助手 % 日期…

学Simulink——AC-DC整流器场景:基于PWM整流器拓扑结构的建模:三相电压型PWM整流器(SR)单位功率因数控制仿真

目录 手把手教你学Simulink——AC-DC整流器场景:基于PWM整流器拓扑结构的建模:三相电压型PWM整流器(SR)单位功率因数控制仿真 一、背景介绍 二、系统结构设计 三、建模过程详解 第一步:创建新Simulink项目 第二步:添加主要模块 1. 三相交流电源 2. PWM整流器电路 …

深度解析 noisereduce:开源音频降噪库实践

项目简介 noisereduce 是一个基于 Python 的开源音频降噪库,专注于为科研、工程和日常应用提供简单高效的噪声抑制工具。该项目由 Tim Sainburg 维护,核心算法基于频谱减法(Spectral Gating),无需深度学习或复杂训练,适合快速集成到音频处理、语音识别、播客后期、科学实…

lottie 动画使用

lottie 官网&#xff1a; https://app.lottiefiles.comhttps://app.lottiefiles.com 选择动画 未下载过 已下载过 点击download 保存到自己的工作空间后&#xff0c;可获取lottie文件 使用vue 点击后获取代码 第一步&#xff0c;项目中加载模块 npm install lottiefiles/do…

Java,八股,cv,算法——双非研0四修之路day16

目录 昨日总结 今日计划 算法——两个数组的交集 算法——两数之和 缓存穿透 常见解决方案 缓存雪崩 常见解决方案 缓存击穿 常见解决方案 栈溢出 堆溢出 功能接口式参数&泛型函数 ​编辑 昨日总结 缓存问题完结&#xff08;缓存穿透、雪崩、击穿&#xff09;…

基于python的微博评论和博文文本分析,包括LDA+聚类+词频分析+lstm热度预测,数据量10000条

思路步骤&#xff1a;本文实现了从文本评论数据中提取有用信息&#xff0c;分析其情感分布、主题分布&#xff0c;并通过可视化展示。以下是具体步骤和思路&#xff1a;1、数据准备与预处理加载数据&#xff1a;通过 pandas 读取文本和评论数据&#xff0c;并进行合并处理。文本…

【CNN】模型评估标准

1.分类模型评价指标在模型评估中&#xff0c;有多个标准用于衡量模型的性能&#xff0c;这些标准包括准确率&#xff08;Accuracy&#xff09;、精确率&#xff08;Precision&#xff09;、召回率&#xff08;Recall&#xff09;、F1 分数&#xff08;F1-Score&#xff09;等。…

Python爬虫实战:诗词名句网《三国演义》全集

Beautiful Soup实战案例&#xff1a;爬取"诗词名句网" 目标 爬取"诗词名句网"上的古典文学作品内容&#xff0c;包括书籍目录和章节内容&#xff0c;并将每章内容独立保存为文本文件。 目标网址: 《三国演义》全集在线阅读_史书典籍_诗词名句网 要求 书…

AWS CAF:企业云转型的战略指南

在数字化转型的大潮中&#xff0c;企业正面临前所未有的变革压力。如何利用云计算驱动业务创新、提升IT敏捷性、优化成本结构&#xff0c;已成为众多企业迫切需要解决的关键课题。然而&#xff0c;云迁移并不是简单地将本地应用“复制”到云上&#xff0c;它是一项牵涉企业组织…

【Redis】Linux 配置Redis

一、Redis介绍 Redis&#xff08;Remote Dictionary Server&#xff09;是一款开源的、高性能的键值对&#xff08;Key-Value&#xff09;存储数据库&#xff0c;由 Salvatore Sanfilippo 于 2009 年开发&#xff0c;采用 ANSI C 语言编写。它以内存存储为核心&#xff0c;支持…

MongoDB数据库高并发商业实践优化·运行优化之不可使用root账户进行MongoDB运行-优雅草卓伊凡

MongoDB数据库高并发商业实践优化运行优化之不可使用root账户进行MongoDB运行-优雅草卓伊凡 引言 关于最近优雅草卓伊凡发布关于MongoDB的内容是由于我们的甲方上线了一个很老的产品&#xff0c;但是他的用户量极大&#xff0c;并且还有各种人搞事情&#xff0c;不断的来GJ&a…

戴尔电脑 Linux 安装与配置指南_导入mysql共享文件夹

本指南将详细介绍在戴尔电脑上安装 Linux 操作系统的步骤&#xff0c;以及后续的重要配置&#xff0c;包括系统选择、安装流程、MySQL 数据恢复、网络配置、文件共享和远程维护等。步骤清晰且配有命令行示例和配置文件示例&#xff0c;适合初中级用户参考。1、Linux 系统选择与…

昇思学习营-DeepSeek-R1-Distill-Qwen-1.5B 模型LoRA微调学习心得

LoRA微调&#xff1a;加入参数式微调冻结原始网络参数&#xff0c;对Attention层中QKV等添加旁支&#xff0c;包含两个低维度的矩阵A和矩阵B&#xff0c;微调过程中仅更新A、B 矩阵效果&#xff1a;训练参数被大幅降低&#xff0c;资源消耗较低。对attention的参数加入如下图所…

彩色转灰度的核心逻辑:三种经典方法及原理对比

灰度实验将彩色图像转换为灰度图像的过程称为灰度化&#xff0c;这种做法在图像处理和计算机视觉领域非常常见。灰度图与彩色图最大的不同就是&#xff1a;彩色图是由R、G、B三个通道组成&#xff0c;而灰度图只有一个通道&#xff0c;也称为单通道图像&#xff0c;所以彩色图转…

Spring Boot 项目启动自动执行逻辑的最佳实践:掌握 CommandLineRunner

前言 Spring Boot 启动阶段,总有些操作迫不及待冲在前线:配置要加载,数据要准备,日志要抢首发,仿佛个个争当“启动 MVP”。如果你也想让项目一启动就自动开工,少写点手动触发的“苦力逻辑”,那 CommandLineRunner 就是你的得力助手。它像那个永远第一个打卡的同事,不喝…

高可用集群KEEPALIVED的详细部署

一.高可用集群 1.1 集群类型 LB&#xff1a;Load Balance 负载均衡 LVS/HAProxy/nginx&#xff08;http/upstream, stream/upstream&#xff09; HA&#xff1a;High Availability 高可用集群 数据库、Redis SPoF: Single Point of Failure&#xff0c;解决单点故障 HPC&#x…