數據庫,Spring Boot,數據源

您是對的,我之前的回答解釋了Spring Boot在操作MySQL時不一定需要顯式配置指定的數據源類型,因為它有自動配置機制,但沒有直接點明在自動配置情況下“數據源是什么”。

在Spring Boot自動配置機制下,這個“數據源”指的是一個連接池(Connection Pool)的實現

以下是針對“數據源是什么”以及Spring Boot如何處理它的關鍵筆記:


Spring Boot 中的數據源(連接池)關鍵筆記 📝

  • 數據源的本質:在Java應用(包括Spring Boot)中,當我們談論“數據源 (DataSource)”時,通常指的是一個實現了 javax.sql.DataSource 接口的對象。這個對象的主要作用是作為數據庫連接的工廠,更常見的是它封裝了一個數據庫連接池

  • 為什么需要連接池

    • 數據庫連接的創建和銷毀是昂貴的操作,耗時且消耗資源。
    • 連接池預先創建并維護一定數量的數據庫連接,當應用程序需要連接時,直接從池中獲取,使用完畢后歸還給池,而不是直接關閉。
    • 這極大地提高了數據庫操作的性能和效率,并能更好地管理數據庫連接資源。
  • Spring Boot 自動配置的連接池:當你在 pom.xml (Maven) 或 build.gradle (Gradle) 中加入了像 spring-boot-starter-data-jpaspring-boot-starter-jdbc 這樣的依賴,并且類路徑中存在相應的數據庫驅動(如 mysql-connector-j),Spring Boot會嘗試按以下順序自動配置一個連接池作為數據源:

    1. HikariCP:如果HikariCP的庫在類路徑上,Spring Boot會優先選擇它。HikariCP以其高性能、輕量級和可靠性而聞名,是Spring Boot 2.0及以后版本的默認選擇(如果可用)。
    2. Tomcat JDBC Pool:如果HikariCP不可用,但Tomcat JDBC Pool(通常通過 spring-boot-starter-web 間接引入,因為它內嵌了Tomcat)在類路徑上,則會使用它。
    3. Apache Commons DBCP2:如果以上兩者都不可用,且Apache Commons DBCP2在類路徑上,則會選用它。
  • 如何知道當前使用的是哪個數據源

    • 啟動日志:Spring Boot啟動時,如果開啟了DEBUG級別的日志(例如,在application.properties中設置 logging.level.org.springframework.boot.autoconfigure.jdbc=DEBUGlogging.level.com.zaxxer.hikari=DEBUG),通常可以看到關于數據源配置的詳細信息。
    • Actuator端點:如果項目中引入了 spring-boot-starter-actuator,可以通過訪問 /actuator/health/actuator/metrics 等端點來間接了解數據源的健康狀況和一些指標,有時也能推斷出具體類型。
    • 代碼檢查:在代碼中注入 javax.sql.DataSource bean,然后打印 dataSource.getClass().getName() 也能看到實際的類名。
  • 顯式指定數據源類型:正如之前筆記提到的,如果不想使用Spring Boot的自動選擇,或者想使用不在上述優先級的其他連接池(比如阿里巴巴的Druid),可以通過在 application.propertiesapplication.yml 中設置 spring.datasource.type 屬性來顯式指定,例如:

    spring.datasource.type=com.zaxxer.hikari.HikariDataSource
    # 或者
    # spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    

總結來說,在Spring Boot操作MySQL時,這個“數據源”通常是一個高性能的數據庫連接池實現,如HikariCP,由Spring Boot根據類路徑上的可用庫自動配置和管理。開發者主要通過配置文件提供數據庫的連接信息(URL、用戶名、密碼等)。

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

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

相關文章

數據結構測試模擬題(3)

1、兩個有序鏈表序列的合并 #include<bits/stdc.h> using namespace std;struct node{int num;node* next; };// 創建鏈表 node* CreatList(){int x;node *head new node(); // 創建頭節點head->next NULL;node *tail head; // 尾指針初始指向頭節點while…

LabVIEW Val (Sgnl) 屬性

在 LabVIEW 事件驅動架構中&#xff0c;Val (Sgnl) 屬性&#xff08;Value (Signaling)&#xff09;是實現編程觸發與用戶交互行為一致性的關鍵技術。與普通 Value 屬性不同&#xff0c;Val (Sgnl) 在修改控件值的同時強制生成值改變事件&#xff0c;確保程序邏輯與 UI 交互保持…

04.MySQL數據類型詳解

MySQL數據類型詳解 文章目錄 MySQL數據類型數據類型分類數值類型 tinyint類型bit類型float類型decimal類型 字符串類型 char類型varchar類型char和varchar比較 時間日期類型enum和set類型數據類型選擇的進階技巧常見誤區與解決方案性能優化與最佳實踐 MySQL數據類型 數據類型…

Spring AI 之對話記憶(Chat Memory)

大型語言模型&#xff08;LLMs&#xff09;是無狀態的&#xff0c;這意味著它們不會保留關于之前交互的信息。當想在多次交互中保持上下文或狀態時&#xff0c;這可能會成為一個限制。為了解決這一問題&#xff0c;Spring AI 提供了對話記憶功能&#xff0c;允許你在與大型語言…

H?lder Statistical Pseudo Divergence Proper H?lder Divergence

目錄 Hlder Statistical Pseudo DivergenceProper Hlder Divergence Hlder Statistical Pseudo Divergence Hlder Statistical Pseudo Divergence是一種度量兩個概率分布 p p p 和 q q q差異的方法&#xff0c;它基于Hlder不等式。定義如下&#xff1a; D α H ( p : q ) 1 …

時序數據庫IoTDB基于云原生的創新與實踐

概述 Apache IoTDB 是一款獨立自研的物聯網時序數據庫&#xff0c;作為 Apache 基金會的頂級項目&#xff0c;它融合了產學研的優勢&#xff0c;擁有深厚的科研基底。IoTDB 采用了端邊云協同的架構&#xff0c;專為物聯網設計&#xff0c;致力于提供極致的性能。 數據模型 I…

git 如何解決分支合并沖突(VS code可視化解決+gitLab網頁解決)

1、定義&#xff1a;兩個分支修改了同一文件的同一行代碼&#xff0c;無法自動決定如何合并代碼&#xff0c;需要人工干預的情況。&#xff08;假設A提交了文件a,此時B在未拉取代碼的情況下&#xff0c;直接提交是會報錯的&#xff0c;此時需要拉取之后再提交才會成功&#xff…

系統架構設計師(一):計算機系統基礎知識

系統架構設計師&#xff08;一&#xff09;&#xff1a;計算機系統基礎知識 引言計算機系統概述計算機硬件處理器處理器指令集常見處理器 存儲器總線總線性能指標總線分類按照總線在計算機中所處的位置劃分按照連接方式分類按照功能分類 接口接口分類 計算機軟件文件系統文件類…

聊一聊接口測試中緩存處理策略

目錄 一、強制繞過緩存 添加時間戳參數 修改請求頭 二、主動清除緩存 清除本地緩存 清除服務端緩存&#xff08;需權限&#xff09; 清除CDN緩存 三、測試緩存邏輯 首次請求獲取數據 記錄響應頭中的緩存標識????? 驗證緩存生效 測試緩存過期??????? 四…

機器學習算法-邏輯回歸

今天我們用 「預測考試是否及格」 的例子來講解邏輯回歸&#xff0c;從原理到實現一步步拆解&#xff0c;保證零基礎也能懂&#xff01; &#x1f3af; 例子背景 假設你是班主任&#xff0c;要根據學生的「學習時間」預測「是否及格」&#xff0c;手上有以下數據&#xff1a;…

【論文解讀】CVPR2023 PoseFormerV2:3D人體姿態估計(附論文地址)

論文鏈接&#xff1a;https://arxiv.org/pdf/2303.17472 源碼鏈接&#xff1a;https://github.com/QitaoZhao/PoseFormerV2 Abstract 本文提出了 PoseFormerV2&#xff0c;通過探索頻率域來提高 3D 人體姿態估計的效率和魯棒性。PoseFormerV2 利用離散余弦變換&#xff08;DC…

DRW - 加密市場預測

1.數據集描述 在本次比賽中&#xff0c;數據集包含加密市場的分鐘級歷史數據。您的挑戰是預測未來的加密貨幣市場價格走勢。這是一項kaggle社區預測競賽&#xff0c;您可以以 CSV 文件的形式或通過 Kaggle Notebooks 提交您的預測。有關使用 Kaggle Notebooks 的更多詳細信息&a…

嵌入式Linux系統中的啟動分區架構

在嵌入式Linux系統架構中,Linux內核、設備樹(Device Tree)與引導配置文件構成了系統啟動的基礎核心。如何安全、高效地管理這些關鍵文件,直接影響到系統的穩定性與可維護性。近年來,越來越多的嵌入式Linux開發者選擇將啟動相關文件從傳統的“混合存放”方式,轉向采用獨立…

用戶資產化視角下開源AI智能名片鏈動2+1模式S2B2C商城小程序的應用研究

摘要&#xff1a;在數字化時代&#xff0c;平臺流量用戶尚未完全轉化為企業的數字資產&#xff0c;唯有將其沉淀至私域流量池并實現可控、隨時觸達&#xff0c;方能成為企業重要的數字資產。本文從用戶資產化視角出發&#xff0c;探討開源AI智能名片鏈動21模式S2B2C商城小程序在…

Spring是如何實現屬性占位符解析

Spring屬性占位符解析 核心實現思路1?? 定義占位符處理器類2?? 處理 BeanDefinition 中的屬性3?? 替換具體的占位符4?? 加載配置文件5?? Getter / Setter 方法 源碼見&#xff1a;mini-spring 在使用 Spring 框架開發過程中&#xff0c;為了實現配置的靈活性&#xf…

【大模型面試每日一題】Day 31:LoRA微調方法中低秩矩陣的秩r如何選取?

【大模型面試每日一題】Day 31&#xff1a;LoRA微調方法中低秩矩陣的秩r如何選取&#xff1f; &#x1f4cc; 題目重現 &#x1f31f;&#x1f31f; 面試官:LoRA微調方法中低秩矩陣的秩r如何選取&#xff1f;&#xff1a; #mermaid-svg-g5hxSxV8epzWyP98 {font-family:"…

字節golang后端二面

前端接口使用restful格式&#xff0c;post與get的區別是什么&#xff1f; HTTP網絡返回的狀態碼有哪些&#xff1f; go語言切片與數組的區別是什么&#xff1f; MySQL實現并發安全避免兩個事務同時對一個記錄寫操作的手段有哪些&#xff1f; 如何實現業務的冪等性&#xff08;在…

Spring Security安全實踐指南

安全性的核心價值 用戶視角的數據敏感性認知 從終端用戶角度出發,每個應用程序都涉及不同級別的數據敏感度。以電子郵件服務與網上銀行為例:前者內容泄露可能僅造成隱私困擾,而后者賬戶若被操控將直接導致財產損失。這種差異體現了安全防護需要分級實施的基本原則: // 偽…

Leetcode第451場周賽分析總結

題目鏈接 競賽 - 力扣&#xff08;LeetCode&#xff09;全球極客摯愛的技術成長平臺 題目解析 A. 3560. 木材運輸的最小成本 AC代碼 class Solution { public:long long minCuttingCost(int n, int m, int k) {if (n > m) swap(n, m); // n < m;using ll long lon…

Linux中的shell腳本

什么是shell腳本 shell腳本是文本的一種shell腳本是可以運行的文本shell腳本的內容是由邏輯和數據組成shell腳本是解釋型語言 用file命令可以查看文件是否是一個腳本文件 file filename 腳本書寫規范 注釋 單行注釋 使用#號來進行單行注釋 多行注釋 使用 : " 注釋內容…