Java中配置兩個r2db連接不同的數據庫

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…