Spring Boot中如何配置和使用多數據源

Spring Boot中如何配置和使用多數據源

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

1. 引言

在許多現代應用中,數據存儲和管理往往需要使用多個數據庫,每個數據庫可能有不同的訪問權限、數據結構或者用途。Spring Boot提供了強大的支持來配置和管理多個數據源,使得開發者能夠輕松地實現多數據源的配置和使用。

2. 準備工作

在開始之前,請確保你已經安裝了以下軟件和組件:

  • Java開發環境
  • Spring Boot框架
3. 創建Spring Boot項目

首先,讓我們創建一個基本的Spring Boot項目。假設我們的包名是cn.juwatech.multidatasourcedemo

package cn.juwatech.multidatasourcedemo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class MultiDataSourceDemoApplication {public static void main(String[] args) {SpringApplication.run(MultiDataSourceDemoApplication.class, args);}
}
4. 配置多數據源

application.properties中配置多個數據源的連接信息:

# 數據源1
spring.datasource.first.url=jdbc:mysql://localhost:3306/first_db
spring.datasource.first.username=root
spring.datasource.first.password=secret
spring.datasource.first.driver-class-name=com.mysql.jdbc.Driver# 數據源2
spring.datasource.second.url=jdbc:mysql://localhost:3306/second_db
spring.datasource.second.username=root
spring.datasource.second.password=secret
spring.datasource.second.driver-class-name=com.mysql.jdbc.Driver
5. 創建多數據源配置類

編寫一個配置類,分別配置和注入多個數據源:

package cn.juwatech.multidatasourcedemo.config;import javax.sql.DataSource;
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 {@Bean(name = "firstDataSource")@ConfigurationProperties(prefix = "spring.datasource.first")public DataSource firstDataSource() {return DataSourceBuilder.create().build();}@Bean(name = "secondDataSource")@ConfigurationProperties(prefix = "spring.datasource.second")public DataSource secondDataSource() {return DataSourceBuilder.create().build();}
}
6. 創建JPA Repository

為每個數據源創建對應的JPA Repository接口:

package cn.juwatech.multidatasourcedemo.repository.first;import cn.juwatech.multidatasourcedemo.model.first.FirstEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;@Repository
public interface FirstEntityRepository extends JpaRepository<FirstEntity, Long> {
}
package cn.juwatech.multidatasourcedemo.repository.second;import cn.juwatech.multidatasourcedemo.model.second.SecondEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;@Repository
public interface SecondEntityRepository extends JpaRepository<SecondEntity, Long> {
}
7. 編寫實體類

分別創建每個數據源的實體類,例如:

package cn.juwatech.multidatasourcedemo.model.first;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;@Entity
public class FirstEntity {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;// 省略Getter和Setter方法
}
package cn.juwatech.multidatasourcedemo.model.second;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;@Entity
public class SecondEntity {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String description;// 省略Getter和Setter方法
}
8. 使用多數據源

在Service層或Controller層使用@Qualifier注解指定具體的數據源:

package cn.juwatech.multidatasourcedemo.service;import cn.juwatech.multidatasourcedemo.model.first.FirstEntity;
import cn.juwatech.multidatasourcedemo.model.second.SecondEntity;
import cn.juwatech.multidatasourcedemo.repository.first.FirstEntityRepository;
import cn.juwatech.multidatasourcedemo.repository.second.SecondEntityRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
public class DataService {@Autowired@Qualifier("firstDataSource")private FirstEntityRepository firstRepository;@Autowired@Qualifier("secondDataSource")private SecondEntityRepository secondRepository;@Transactional(transactionManager = "firstTransactionManager")public void saveDataToFirstDB(FirstEntity entity) {firstRepository.save(entity);}@Transactional(transactionManager = "secondTransactionManager")public void saveDataToSecondDB(SecondEntity entity) {secondRepository.save(entity);}
}
9. 測試和部署

完成以上步驟后,可以啟動Spring Boot應用程序,并測試多數據源的讀寫操作。確保每個數據源配置正確,并能夠正常連接和操作數據庫。

10. 總結

通過本文,我們詳細介紹了如何在Spring Boot應用中配置和使用多數據源。從配置多個數據源的連接信息,到編寫對應的Repository和實體類,再到在Service層使用@Qualifier注解指定數據源,我們逐步了解了如何處理復雜應用中的多數據源需求。

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

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

相關文章

oracle with as 是什么并且怎么用

Oracle中的WITH AS語句&#xff0c;也被稱為Common Table Expressions&#xff08;CTE&#xff09;&#xff0c;是一個用于定義臨時結果集或視圖的子句。這個臨時結果集或視圖只在當前的查詢中存在&#xff0c;并且在查詢完成后會被自動刪除。使用WITH AS可以提高SQL語句的可讀…

JavaWeb——MySQL:navicate客戶端工具簡單使用

目錄 1. 連接 2. 新建數據庫 3. 使用數據庫 4. 新建表 5.使用表 6. 導出數據庫 我這里是英文版&#xff0c;沒有進行漢化。 1. 連接 點擊左上角Connection&#xff0c;選擇MySQL&#xff0c;&#xff08;我連接的是自己計算機上的數據庫&#xff09;連接名輸入&#x…

使用ScheduledExecutorService進行任務調度

使用ScheduledExecutorService進行任務調度 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 在軟件開發中&#xff0c;任務調度是一項重要的技術需求&#xff…

抖音開放平臺運營同學聯系我了,非常感謝

大家好&#xff0c;我是小悟 是怎么個事呢&#xff1f; 前幾天在對接抖音開放平臺&#xff0c;服務商代開發小程序里面的小程序備案&#xff0c;上傳備案圖片接口遇到了問題&#xff0c;具體的問題可詳閱【抖音開放平臺&#xff0c;這誰寫的&#xff0c;要扣績效吧】。 評論…

Zoom視頻會議的虛擬背景功能:打造個性化會議體驗

在遠程工作和在線交流日益普及的今天&#xff0c;視頻會議已成為連接人們的橋梁。Zoom視頻會議軟件因其出色的音視頻質量和豐富的功能而廣受歡迎。其中&#xff0c;虛擬背景功能是Zoom的一大亮點&#xff0c;它不僅能夠保護用戶隱私&#xff0c;還能為會議增添趣味性。本文將詳…

Java編程基本功大揭秘 | 詳解深入分析Java線程池源碼和底層原理,掌握實戰技巧【1】

詳解深入分析Java線程池源碼和底層原理 文章大綱引言Java線程池概念及重要性 ThreadPoolExecutor類的概述ThreadPoolExecutor類的基本功能和作用**基本功能****核心作用** ThreadPoolExecutor主要構造函數及其參數繼承關系鏈功能介紹ThreadPoolExecutor 構造器構造器參數構造器…

c語言自動售貨機

C語言編寫的自動售貨機程序可以模擬真實自動售貨機的基本功能&#xff0c;例如選擇商品、顯示價格、付款和找零。下面是一個簡單的示例代碼&#xff0c;展示了一個基本的自動售貨機程序&#xff1a; #include <stdio.h>// 商品結構體 typedef struct {char name[30];int…

破解對LabVIEW的偏見

LabVIEW被廣泛應用于科學研究、工程測試和自動化控制領域&#xff0c;具有專業性和高效的開發能力。盡管有人對其存在偏見&#xff0c;認為不如C語言&#xff0c;但LabVIEW的圖形化編程、強大集成能力、豐富社區支持和專業功能&#xff0c;使其在許多實際應用中表現出色。通過多…

Go語言環境安裝

Go下載地址 哪個能用用哪個。 https://go.dev/ https://golang.google.cn/&#xff08;Golang官網的官方鏡像&#xff09; Windows 使用.msi安裝包安裝 下載msi文件 安裝 雙擊運行go1.22.4.windows-amd64.msi Next 勾選I accept the terms in the License Agreement&…

收藏 | SSL證書無效的原因和解決辦法

當瀏覽器訪問一個使用SSL證書保護的網站時&#xff0c;會檢查其證書的有效性。如果發現證書存在問題&#xff0c;瀏覽器會顯示“SSL證書無效”的警告信息&#xff0c;提醒用戶存在潛在的安全風險。 “SSL證書無效”的警告可能會導致用戶離開站點&#xff08;并且永遠不會返回&…

MySQL高級-SQL優化-小結

文章目錄 1、insert 優化2、主鍵優化3、order by 優化4、group by 優化5、limit 優化6、count 優化7、update 優化 1、insert 優化 insert&#xff1a;批量插入、手動控制事務、主鍵順序插入 大批量插入&#xff1a;load data local infile 2、主鍵優化 主鍵長度盡量短、順序插…

系統漏洞復現與勒索病毒

知識點&#xff1a;SMB漏洞介紹、漏洞復現流程、勒索病毒攻擊與防護 滲透測試相關&#xff1a; 基本概念&#xff1a; 滲透測試就是利用我們所掌握的滲透知識&#xff0c;對網站進行一步一步的滲透&#xff0c;發現其中存在的漏洞和隱藏的風險&#xff0c;然后撰寫一篇測試報…

FastAPI教程I

本文參考FastAPI教程https://fastapi.tiangolo.com/zh/tutorial 第一步 import uvicorn from fastapi import FastAPIapp FastAPI()app.get("/") async def root():return {"message": "Hello World"}if __name__ __main__:uvicorn.run(&quo…

GPT-4o模型到底有多強

近年來&#xff0c;人工智能技術突飛猛進&#xff0c;在自然語言處理&#xff08;NLP&#xff09;和計算機視覺等領域取得了令人矚目的成就。OpenAI推出的GPT-4o模型作為最新一代的語言模型&#xff0c;進一步提升了AI的能力&#xff0c;尤其在文檔分析、識圖生文、文生圖等功能…

elementUI的搭建使用過程

Element - The worlds most popular Vue UI framework 上面是elementUI的網站,進入網站 點擊右上角的組件按鈕 復制這段代碼到你的項目終端:npm i element-ui -S 加載完成后即可使用elementUI網站中的組件,使用它們只需要復制組件下面的代碼即可

Unity UGUI 實現簡單兩點連線功能

實現 記錄鼠標點擊位置為線段起點。 posStart Input.mousePosition; 創建一個Image 作為線段。 line new GameObject("line"); rtLine line.AddComponent<RectTransform>(); rtLine.pivot new Vector2(0, 0.5f); rtLine.localScale Vector3.one; img…

Linux 進程通信

1.什么是進程通信&#xff1f; 答&#xff1a;兩個或多個進程實現數據層面的交互&#xff1b;但是因為進程的獨立性&#xff0c;導致進程通信的成本較高&#xff1b; 2.為什么要通信&#xff1f; 答&#xff1a;多進程之間由協同的需求&#xff0c;所以通信&#xff1b;以下…

Java常用對象的快速初始化

在Java中&#xff0c;有多種方式來快速初始化各種常用對象&#xff0c;如字符串數組&#xff08;String[]&#xff09;&#xff0c;集合列表&#xff08;List&#xff09;&#xff0c;映射表&#xff08;Map&#xff09;&#xff0c;以及集合&#xff08;Set&#xff09;。不同…

動態服務管理的藝術:Eureka在服務擴展與收縮中的策略

動態服務管理的藝術&#xff1a;Eureka在服務擴展與收縮中的策略 在微服務架構中&#xff0c;服務的動態擴展和收縮是實現高可用性和彈性的關鍵。Eureka&#xff0c;作為Netflix開源的服務發現框架&#xff0c;提供了一套機制來處理服務實例的動態變化。本文將深入探討Eureka如…

在操作系統中,background通常指的是運行于后臺的進程或任務

在計算機中&#xff0c;"background"一詞具有多種含義&#xff0c;以下是一些主要的解釋和相關信息&#xff1a; 計算機視覺中的背景&#xff08;Background&#xff09;&#xff1a; 在計算機視覺中&#xff0c;background指的是圖像或視頻中的背景部分&#xff0c;…