spring佔位符無法替換的報錯排查

2021-09-29 00:14:15 字數 1224 閱讀 1168

jdk:1.8

mybatis:3.4.5

spring:5.1.9

專案遷移到springboot後,啟動報錯,概要資訊是說某乙個佔位符$(並非真實的佔位符名稱)找不到。

propertyplaceholderconfigurer裡面的配置資訊沒有載入到。

有某些bean觸發了提前初始化,導致propertyplaceholderconfigurer 的postprocessbeanfactory方法沒有執行,導致佔位符沒有被替換。

刪除依賴的其他專案的xml(如dependency-a.xml, dependency-b.xml),把底層xml裡面的propertyplaceholderconfigurer顯示的配置在本專案中。

啟動服務,進行debug,在propertyplaceholderconfigurer裡面打斷點,發現是可以載入正確的配置資訊的。

所以排除這個方向

先逐步的把依賴的其他的xml配置檔案乙個乙個的引入到本專案,直到引入其中乙個時,服務啟動報錯,這樣先定位具體是哪個xml配置檔案導致的

把問題xml裡面的配置想,copy到本專案,copy過來後,全部注釋掉,從第乙個配置項開始,逐一開啟注釋,然後啟動服務,進行測試,直到發現是哪一段配置項導致了目標異常

最終進入到classpathbeandefinitionscanner到doscan方法,

protected setdoscan(string... basepackages) 

if (candidate instanceof annotatedbeandefinition)

if (checkcandidate(beanname, candidate))

}} return beandefinitions;

}

最後的if判斷那裡會檢查是否有同名的不相容的bean,這個地方是罪魁禍首。這個發生了報錯,資訊如下。

annotation-specified bean name '***dao' for bean class [com.***.***dao] 

conflicts with existing,

這就說明有同名的bean,經過查詢,果然本專案內部定義了乙個和其他jar裡面同包名,同類名的 dao類。

那麼把本專案內的dao類改個名字即可,問題解決。

報錯異常是表象,具體原因還得深究。

這個問題可能不舉報普遍性,主要關注排查思路。

spring報無法讀取方案文件的錯誤

報錯資訊 無法讀取方案文件 原因為 1 無法找到文件 2 無法讀取文件 3 文件的根元素不是 分析 工程中引用了多個版本的 org.springframework spring tx,如3.0.5和3.1.1。打包時會找spring tx 3.1.xsd,但在3.0.5包中 spring.schem...

Python 格式化輸出佔位符替換

python 用有 s d s是字串佔位它可以接受數字或字串 d 是只可以接收數字 如下 name input name age input age job input job hobbie input hobbie info info of s 這裡的每個 s就是乙個佔位符,本行的代表 後面拓號裡...

字串中 key 佔位符替換

今天在開發中遇到了模板拼接的問題 類似於 我是,我來自,今年歲 轉換成 我是小明,我來自北京,今年15歲 接受時是用map 的形式 其中map的key 對應著模板中大括號中的key string a 我是,我來自,今年歲 map mapstring newhashmap mapstring.put ...