關于HikariDataSource (null)的誤解,順帶提出一種mybaits-Plus mapper映射失敗的容易被忽視的原因

首先探究此問題并無什么實際意義,純屬是個人好奇使然,也順帶熟悉了一下Springboot 數據庫連接的相關問題,本人純小白說的不對的地方懇請大佬指正!!

關于HikariDataSource (null)的誤解

問題的發現

 @Value("${mybatis-plus.mapper-locations}")private String[] mapperLocationPatterns;@Beanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean factory = new MybatisSqlSessionFactoryBean();factory.setDataSource(dataSource);factory.setMapperLocations();ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();List<Resource> resources = new ArrayList<>();for (String pattern : mapperLocationPatterns) {Collections.addAll(resources, resolver.getResources(pattern.trim()));}factory.setMapperLocations(resources.toArray(new Resource[0]));return factory.getObject();}

上圖是自己手寫的 sqlSessionFactory 然后調試過程中,在讀取數據源的時候意外發現

dataSource =?HikariDataSource (null) 第一眼我就被誤解了誤以為數據源映射失敗了所以傳了個空值,可是定睛一瞧卻發現它實際上是創建成功了的,對象屬性一個沒少,只是它的名字里有個null

接下來就來談談這個容易誤導人的null 到底說的是什么

首先講解這個問題前要清楚,自動配置類往往在我們自己定義的@Configuration類之前先創建bean 于是根據這個我們很容易找到 dataSouce 實際上是依賴于 Hikari 創建的(關于Hikari知道他是個jdbc連接池就行,把它看作Druid也行,他是Springboot2.0以后默認的連接池)

于是我們可以在這個類(DataSourceConfiguration.class)里面找到 Hikari 下面的dataSource方法如下圖

進一步的我們跳到 HikariDataSource 類里面繼續找,感覺已經離目標很近了

還記得dataSource =?HikariDataSource (null) 他是這么顯示的,那么可以看出是他的類名叫這個于是鎖定 toString()方法

終于找到了, 很顯然為null的就是 這個pool 那么這個poll 是什么呢它為什么會顯示null呢,繼續尋找生成poll的方法于是

也就是說在Bean 加載過程中數據庫只不過是把相關配置加載到了DataSource 但實際上并沒有進行數據庫連接 在項目正式啟動完畢后 才向數據庫發起第一次請求,并給他賦了初始值

可以看到此時括號內就不是null 而是數據庫連接池的名字了,那么通過這個連接池也就可以查詢到當前數據庫的狀態,比如當前連接數等等

當然你要是不想讓他叫這個默認的名字也可以在配置文件中自己起一個比如“hhh”

總結一下

在spring創建dataSource bean 的時候只是將相關配置載入進去但并沒有實施數據庫連接(懶加載用來節省資源)因此這個時候 呈現的是一個沒有數據庫連接池的 dataSource (null)在項目全部加載完以后 再創建數據庫連接池并發起連接數據庫請求

一種mybaits-Plus mapper映射失敗的容易被忽視的原因

大多數mapper映射失敗的原因都是路徑名稱寫沒寫對啊,文件放的位置對不對啊,參數對不對啊,但還有一種原因容易被人忽視。

那就是如果你自己寫了 sqlSessionFactory的配置, 原本它是由Springboot 自動配置的所以他會自動去 你的配置文件里面找相關資源,但你自己寫了sqlSessionFactory 的bean配置就需要像我這里一樣自己手動配置一下 MapperLocations

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

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

相關文章

Centos7上安裝docker - yum在線的方式

步驟一 &#xff1a; 安裝 yum-utils yum install -y yum-utils步驟二 &#xff1a; 替換docker 的國內的源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo執行完成后&#xff0c;會在 /etc/yum.repos.d/ 目錄下 新增 doc…

250405-VSCode編輯launch.json實現Debug調試Open-WebUI

A. 最終效果 根據__init__.py配置launch.json 根據中utils/chat.py中form_data的messages [{role: user, content: 唐老鴨}],可以找到用戶輸入&#xff0c;進而通過關鍵詞或模型調用的方式&#xff0c;對敏感問題進行特殊處理。 B. 文件配置 launch.json // { // /…

①(PROFINET 轉 Modbus TCP)EtherCAT/Ethernet/IP/Profinet/ModbusTCP協議互轉工業串口網關

型號 協議轉換通信網關 PROFINET 轉 Modbus TCP MS-GW35 概述 MS-GW35 是 PROFINET 和 Modbus TCP 協議轉換網關&#xff0c;為用戶提供一種 PLC擴展的集成解決方案&#xff0c;可以輕松容易將 Modbus TCP 網絡接入 PROFINET 網絡中&#xff0c;方便擴展&#xff0c;不受限制…

分治-歸并排序-逆序對問題

目錄 1.升序&#xff08;以右邊的合并組為基準&#xff09; 2.降序&#xff08;以左邊的合并組為基準&#xff09; 3.逆對序--固定下標 1.升序&#xff08;以右邊的合并組為基準&#xff09; 找出左邊有多少個數比我(nums[right])大 應該在每一次合并之前&#xff0c;進行…

(四)數據檢索與增強生成——讓對話系統更智能、更高效

上一篇&#xff1a;&#xff08;三&#xff09;鏈式工作流構建——打造智能對話的強大引擎 在前三個階段&#xff0c;我們已經搭建了一個基礎的智能對話&#xff0c;并深入探討了輸入輸出處理和鏈式工作流構建的細節。今天&#xff0c;我們將進入智能對話系統的高級階段——數…

JVM虛擬機篇(二):深入剖析Java與元空間(MetaSpace)

這里寫目錄標題 JVM虛擬機篇&#xff08;二&#xff09;&#xff1a;深入剖析Java與元空間&#xff08;MetaSpace&#xff09;一、引言二、全面認識Java2.1 Java的起源與發展歷程2.2 Java的特性2.2.1 簡單性2.2.2 面向對象2.2.3 平臺無關性2.2.4 健壯性2.2.5 安全性2.2.6 多線程…

如何查看 MySQL 的磁盤空間使用情況:從表級到數據庫級的分析

在日常數據庫管理中&#xff0c;了解每張表和每個數據庫占用了多少磁盤空間是非常關鍵的。這不僅有助于我們監控數據增長&#xff0c;還能為性能優化提供依據。 Google Gemini中國版調用Google Gemini API&#xff0c;中國大陸優化&#xff0c;完全免費&#xff01;https://ge…

[Windows] XHS-Downloader V2.4 | 小紅書無水印下載工具 支持多平臺批量采集

[Windows] XHS-Downloader 鏈接&#xff1a;https://pan.xunlei.com/s/VON4ygFN1JcyzLJJIOqIpqodA1?pwdsinu# XHS-Downloader 是一款開源免費的小紅書內容下載工具&#xff0c;支持無水印視頻 / 圖文提取、多鏈接批量處理及賬號作品采集。其核心優勢包括&#xff1a; 全平臺…

6.1 寬度優先搜索算法(BFS)

寬度優先搜索算法(BFS Breadth first search) 又稱廣度優先搜索&#xff0c;這種搜索是逐層的&#xff0c;搜索完上層&#xff0c;才會搜索下一層&#xff0c;直到找到目標節點。 搜索過程如圖中箭頭方向&#xff1a; 【例如】 八數碼難題&#xff1a;利用空格的移動&#xff…

基于LSTM的文本分類2——文本數據處理

前言 由于計算機無法認識到文字內容&#xff0c;因此在訓練模型時需要將文字映射到計算機能夠識別的編碼內容。 映射的流程如下&#xff1a; 首先將文字內容按照詞表映射到成唯一的數字ID。比如“我愛中國”&#xff0c;將“中”映射為1&#xff0c;將“國”映射到2。再將文…

Redis數據結構之ZSet

目錄 1.概述2.常見操作2.1 ZADD2.2 ZRANGE2.3 ZREVRANGE2.4 ZRANGEBYSCORE2.5 ZSCORE2.6 ZCARD2.6 ZREM2.7 ZINCRBY2.8 ZCOUNT2.9 ZMPOP2.10 ZRANK2.11 ZREVRANK 3.總結 1.概述 ZSet和Set一樣也是String類型元素的集合&#xff0c;且不允許重復的成員&#xff0c;不同的是ZSet…

什么是DHCP服務,在生活中的應用是什么?

提起DHCP&#xff0c;不接觸互聯網的可能會很陌生&#xff0c;其實并沒有這么高深&#xff0c;簡明扼要的說就是可以自動為連接的設備分配IP地址&#xff0c;子網掩碼&#xff0c;網關&#xff0c;dns等網絡參數。使連接步驟簡化&#xff0c;從而提高效率。 主要功能&#xff…

2025 AI智能數字農業研討會在蘇州啟幕,科技助農與數據興業成焦點

4月2日&#xff0c;以"科技助農數據興業”為主題的2025AI智能數字農業研討會在蘇州國際博覽中心盛大啟幕。本次盛會吸引了來自全國各地相關部門領導、知名專家學者、行業協會組織&#xff0c;以及縣級市農業企業代表、縣級市農產品銷售商等萬名嘉賓齊聚姑蘇城&#xff0c;…

論文導讀 | SOSP23 | Gemini:大模型 內存CheckPoint 快速故障恢復

本期分享的是一篇SOSP 2023論文&#xff1a; Gemini: Fast Failure Recovery in Distributed Training with In-Memory Checkpoints Zhuang Wang (Rice University), Zhen Jia (Amazon Web Services, Inc.), Shuai Zheng (Amazon Web Services), Zhen Zhang (Amazon Web Servic…

wordpress可視化數據采集Scrapes插件,WP博客網站自動采集發布

源碼介紹 wordpress自動采集Scrapes插件&#xff0c;支持ripro&#xff0c;modown&#xff0c;子比&#xff0c;7b2等多種WordPress主題 支持PHP7.4&#xff0c;PHP8.0及以上不支持 上傳插件到wp-content/plugins目錄&#xff0c;然后解壓 不需要寫采集規則&#xff0c;傻瓜式…

JavaScript Math(算數)指南

JavaScript Math&#xff08;算數&#xff09;指南 引言 JavaScript的Math對象是一個內置對象&#xff0c;提供了進行數學運算的方法和值。它對于執行基本的數學計算、生成隨機數以及執行更復雜的數學操作非常有用。本文將詳細介紹JavaScript中的Math對象&#xff0c;涵蓋其常…

Deep Reinforcement Learning for Robotics翻譯解讀

a. 機器人能力 1 單機器人能力&#xff08;Single-robot competencies&#xff09; 運動能力&#xff08;Mobility&#xff09; 行走&#xff08;Locomotion&#xff09;導航&#xff08;Navigation&#xff09; 操作能力&#xff08;Manipulation&#xff09; 靜態操作&…

最新扣子(Coze)案例教程:最新抖音視頻文案提取方法替代方案,音頻視頻提取文案插件制作,手把手教學,完全免費教程

&#x1f468;?&#x1f4bb; 星球群同學反饋&#xff0c;扣子平臺的視頻提取插件已下架&#xff0c;很多智能體及工作流不能使用&#xff0c;斜杠君這里研究了一個替代方案分享給大家。 方案原理&#xff1a;無論是任何視頻或音頻轉文案&#xff0c;我們提取的方式首先都是要…

yum list查詢時部分包查找不到流程分析

以下是針對 yum list available -c xxx.repo&#xff08;對應 DNF 的命令行操作&#xff09;的詳細流程解讀&#xff0c;包括參數解析、配置初始化、元數據加載、數據庫查詢&#xff0c;以及讀取不到特定包的場景分析。 1. 命令行參數解析與入口函數 代碼入口: dnf.cli.main.m…

k8s 1.23升級1.24

0、簡介 這里只用3臺服務器來做一個簡單的集群&#xff0c;當前版本是1.23.17目標升級到1.24.17 地址主機名192.168.160.40kuber-master-1192.168.160.41kuber-master-2192.168.160.42kuber-node-1 我這里設置的master2可調度pod&#xff0c;將master2的污點去掉 kubectl de…