Spring Boot中實現多數據源配置

Spring Boot中實現多數據源配置

大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!今天我們將探討如何在Spring Boot應用中實現多數據源配置,以應對復雜業務需求下的數據管理挑戰。

引言

在現代應用程序開發中,經常需要同時連接和管理多個數據庫,例如主數據庫、日志數據庫、統計數據庫等。Spring Boot作為一個流行的Java開發框架,提供了簡便的方式來配置和管理多數據源,使得開發人員能夠靈活處理不同數據源的連接和操作。本文將詳細介紹如何利用Spring Boot實現多數據源配置,并提供具體的代碼示例。

第一步:準備工作

在開始之前,請確保您已經配置好以下環境和工具:

  • JDK和Maven:確保已安裝并配置好Java開發環境和項目構建工具。
  • IDE(如IntelliJ IDEA):用于開發和調試Spring Boot應用。
  • 數據庫服務:例如MySQL、PostgreSQL等,您可以根據實際需要準備多個數據庫實例。

第二步:添加依賴

Maven依賴配置

首先,在您的Spring Boot項目的pom.xml文件中添加以下依賴,包括Spring Boot Starter和數據庫驅動依賴:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency><!-- MySQL 數據庫驅動 -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency><!-- HikariCP 連接池 -->
<dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId>
</dependency>

第三步:配置多數據源

數據源配置類

創建多個數據源配置類,分別配置不同的數據源連接信息。以下是一個示例,配置了兩個數據源:主數據源(dataSourcePrimary)和第二個數據源(dataSourceSecondary)。

package cn.juwatech.multidatasourcedemo.config;import javax.sql.DataSource;import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;@Configuration
public class DataSourceConfig {@Primary@Bean(name = "dataSourcePrimary")@ConfigurationProperties(prefix = "spring.datasource.primary")public DataSource primaryDataSource() {return DataSourceBuilder.create().build();}@Bean(name = "dataSourceSecondary")@ConfigurationProperties(prefix = "spring.datasource.secondary")public DataSource secondaryDataSource() {return DataSourceBuilder.create().build();}
}

在上述示例中,我們使用了Spring Boot的@ConfigurationProperties注解來綁定配置文件中的數據源屬性(例如spring.datasource.primaryspring.datasource.secondary)到對應的DataSource對象。

第四步:配置多數據源屬性

application.properties配置

application.propertiesapplication.yml文件中,配置每個數據源的連接信息。示例配置如下:

# 主數據源配置
spring.datasource.primary.url=jdbc:mysql://localhost:3306/db_primary
spring.datasource.primary.username=root
spring.datasource.primary.password=root# 第二個數據源配置
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/db_secondary
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root

第五步:使用多數據源

Repository接口配置

在定義Repository接口時,通過@Qualifier注解指定要使用的數據源。例如:

package cn.juwatech.multidatasourcedemo.repository.primary;import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;import cn.juwatech.multidatasourcedemo.model.primary.User;@Repository
@Qualifier("dataSourcePrimary")
public interface UserRepositoryPrimary extends JpaRepository<User, Long> {}

在上述示例中,我們使用了@Qualifier("dataSourcePrimary")來指定該Repository接口使用名為"dataSourcePrimary"的數據源,從而實現對主數據源的操作。

第六步:測試多數據源配置

編寫測試用例

編寫測試用例,驗證多數據源配置的正確性和可用性。例如,編寫一個簡單的Service類來測試從不同數據源中讀取數據。

package cn.juwatech.multidatasourcedemo.service;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;import cn.juwatech.multidatasourcedemo.model.primary.User;
import cn.juwatech.multidatasourcedemo.repository.primary.UserRepositoryPrimary;
import cn.juwatech.multidatasourcedemo.repository.secondary.UserRepositorySecondary;@Service
public class UserService {@Autowired@Qualifier("dataSourcePrimary")private UserRepositoryPrimary userRepositoryPrimary;@Autowired@Qualifier("dataSourceSecondary")private UserRepositorySecondary userRepositorySecondary;public User getUserFromPrimaryDataSource(Long id) {return userRepositoryPrimary.findById(id).orElse(null);}public User getUserFromSecondaryDataSource(Long id) {return userRepositorySecondary.findById(id).orElse(null);}
}

結語

通過本文的介紹,您學習了如何在Spring Boot應用中實現多數據源配置。通過配置多個數據源、使用@Qualifier注解和適當的配置文件,可以有效地管理和利用多個數據庫實例,滿足復雜業務場景下對數據管理的需求。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37996.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37996.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37996.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java框架的落地實踐案例:大數據平臺設計與實現

使用 java 框架設計和實現大數據平臺可為企業提供數據處理和分析解決方案&#xff0c;使之能夠做出數據驅動的決策。系統采用微服務架構&#xff0c;分解數據處理任務為松散耦合組件&#xff0c;構建于 spring boot 等 java 框架之上。數據采集通過kafka 進行&#xff0c;數據清…

Rust借助dotenv庫讀取環境變量

這里寫自定義目錄標題 歡迎使用Markdown編輯器新的改變功能快捷鍵合理的創建標題&#xff0c;有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創建一個表格設定內容居中、居左、居右SmartyPants 創建一個自定義列表如何創建一個…

(親測有效)2024代替電視家的app,電視家停了還有什么軟件可以看電視?

嘿&#xff0c;大家好&#xff0c;我是阿星&#xff0c;今天又來跟大家聊聊那些讓人眼前一亮的電視直播軟件。咱們這回不聊那些老掉牙的&#xff0c;來點新鮮的&#xff0c;讓咱們的電視屏幕也能跟上潮流&#xff0c;享受一下科技帶來的便利和樂趣。 首先&#xff0c;得提一提…

如何評價CSS框架TailwindCSS?

端午三天&#xff0c;你們在放假&#xff0c;而我&#xff0c;一個人躲在家里&#xff0c;苦練 tailwindcss。 我在準備這樣一個學習項目&#xff0c;它與傳統的文章/視頻類學習不同&#xff0c;我會在教程中內置大量的可交互案例&#xff0c;提供沉浸式的學習體驗&#xff0c…

SpringMVC中執行流程

文章目錄 14、SpringMVC執行流程14.1、SpringMVC常用組件14.2、DispatcherServlet初始化過程①初始化WebApplicationContext②創建WebApplicationContext③DispatcherServlet初始化策略 14.3、DispatcherServlet調用組件處理請求①processRequest()②doService()③doDispatch()…

Zynq7000系列FPGA中DMA引擎編程指南

DMA引擎的編程指南通常涉及一系列步驟和API調用&#xff0c;以確保數據在內存之間的高效傳輸&#xff0c;而無需CPU的直接干預。 DMA引擎的編程指南包括以下部分&#xff1a; 一、編寫微代碼為AXI事務編寫CCRx程序 通道微碼用于設置dmac.CCRx寄存器以定義AXI事務的屬性。這是…

TikTok直播限流與網絡的關系及解決方法

TikTok作為一款熱門的社交平臺&#xff0c;其直播功能吸引了大量用戶。然而&#xff0c;一些用戶可能會遇到TikTok直播限流的問題&#xff0c;例如直播過程中出現播放量低、直播畫面質量差等情況。那么&#xff0c;TikTok直播限流與所使用的網絡線路是否有關系&#xff1f;是否…

學習springIOC

第二章 Spring IOC 章節內容 Spring IOC技術實現Spring IOC設值注入Spring IOC構造注入 章節目標 掌握Spring IOC技術實現掌握Spring IOC設置注入掌握Spring IOC構造注入 第一節 Spring簡介 1. Spring 簡介 Spring 是目前主流的 Java 開發框架&#xff0c;是 Java 世界最…

Android實現手寫輸入

android應用開發中有時會有手寫輸入需求&#xff0c;非通過系統鍵盤手寫功能&#xff0c;比如自定義鍵盤&#xff0c;這時就需要自己來實現&#xff0c;一般有兩種場景&#xff1a;一種是類似手寫簽名保存&#xff1b;另一種是真正的手寫輸入&#xff0c;需要將筆跡識別成正確的…

JTracker IDEA 中最好的 MyBatis 日志格式化插件

前言 如果你使用 MyBatis ORM 框架&#xff0c;那么你應該用過 MyBatis Log 格式化插件&#xff0c;它可以讓我們的程序輸出的日志更人性化。 但是有一個問題&#xff0c;通常我們只能看到格式化后的效果&#xff0c;沒辦法知道這個 SQL 是誰執行的以及調用的鏈路。 如下圖所…

文章解讀與仿真程序復現思路——電網技術EI\CSCD\北大核心《考慮復合指標優化模態分解和 Stacking 集成的綜合能源系統多元負荷預測》

本專欄欄目提供文章與程序復現思路&#xff0c;具體已有的論文與論文源程序可翻閱本博主免費的專欄欄目《論文與完整程序》 論文與完整源程序_電網論文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 電網論文源程序-CSDN博客電網論文源…

【stm32】大一上學期筆記復制

砌墻單片機 外設是什么&#xff1f; ipage 8 nx軸 128 X0-127 y0-63 PWM脈沖寬度調制 PWM脈沖寬度調制 2023年10月13日 基本特性&#xff1a;脈沖寬度調制PWM是一種對模擬信號進行數字編碼的方法。廣泛引用于電機控制&#xff0c;燈光的亮度調節&#xff0c;功率控制等領域…

趕緊收藏!全網最佳WebSocket封裝:完美支持斷網重連,自動心跳!

文章目錄 一、WebSocket封裝庫簡介二、庫的安裝與配置2.1 安裝2.2 初始化 三、功能詳解3.1 斷網重連3.2 自動心跳3.3 消息隊列3.4 事件管理 四、示例代碼五、總結 &#x1f389;歡迎來到Java學習路線專欄~探索Java中的靜態變量與實例變量 ☆* o(≧▽≦)o *☆嗨~我是IT陳寒&…

Windows Server 2019部署網絡負載均衡NLB服務的詳細操作步驟

部署前準備 首先需要準備兩臺Windows Server 2019服務器&#xff0c;虛擬機創建請參考 VMware Workstation安裝Windows Server2019系統詳細操作步驟_安裝windows server 2019操作系統(寫出操作過程)-CSDN博客 克隆虛擬機請參考 VMware Workstation克隆虛擬機詳細步驟-CSDN博…

超詳細的 C++中的封裝繼承和多態的知識總結<2.多態>

引言 小伙伴們我們都知道了&#xff0c;什么是封裝和繼承&#xff0c;在有了這個的基礎上我們接著來看什么是多態。多態從字面上意思我們就可以知道&#xff0c;大概就是一個函數的不同形態&#xff0c;而且&#xff0c;前邊我們在學習函數重載的時候我們已經簡單的了解了如何用…

[Swiper]在React中使用Swiper時注意銷毀實例

swiper版本號&#xff1a; {"swiper": "^4.4.2", }在useEffect中初始化swiper實例&#xff0c;由于依賴項的變更&#xff0c;可能會重復初始化: useEffect(() > {swiper.current new Swiper(#mainSwiper, {autoplay: {delay: 3000,//3秒切換一次},on…

Android 休眠流程(三)

Android 休眠流程(三) 上一篇《Android 休眠流程(二)》簡單講解內核階段進入休眠流程,本篇繼續深挖,簡單講解休眠進入ATF。ATF(ARM Trusted Firmware) 的體系架構里將整個系統分成四種安全等級,分別為:EL0、EL1、EL2、EL3。將整個安全啟動的流程階段定義為:BL1、BL2…

相等運算符==與 === 的區別

相等運算符用來比較兩個值是否相等 1、運算符 如果相等會返回true&#xff0c;否則返回false使用 來做相等運算當使用來比較兩個值時,如果值的類型不同&#xff0c;則會自動進行類型轉換&#xff0c;將其轉換為相同的類型比較 console.log("1" 1); //true console.…

機器學習算法 —— 基于penguins_raw數據集的決策樹

??歡迎來到 我的博客 —— 探索技術的無限可能! ??博客的簡介(文章目錄) 目錄 實戰演示基于penguins_raw數據集的決策樹實戰導入模塊數據信息簡單查看可視化描述利用 決策樹模型 在二分類上 進行訓練和預測利用 決策樹模型 在三分類(多分類)上 進行訓練和預測實戰 演示…

OCI對象存儲數據轉移到另一個桶

// 舊桶 String bucketName_old “Bucket-old”; // 新桶 String bucketName_new “Bucket-new”; // 圖片前綴 String filePrefix “obj-filePrefix/”; AmazonS3 instance AmazonS3ClientFactory.getS3Instance(); String continuationToken null; int num 0; try { do…