背景:
原來的項目一直跑着沒有問題,今天突然想在原有項目的基礎上,加上redis進行數據的緩存,原來項目的架構就是傳統的SSM框架,於是,大刀闊斧的開始改裝了。。。
編寫redis的配置文件——redis.properties。。。
編寫redis的xml配置文件——redis-context.xml。。。
在spring的主配置文件(我的ssm項目本來只有這么一個xml配置文件)spring-mvc.xml引入剛剛編寫redis-context.xml文件。。。
在數據層注入redis實例,進行數據緩存。。。
一頓操作猛於虎,一切貌似挺簡單,挺順利,但是啟動的時候就開始報錯了,一直在報Could not resolve placeholder錯誤:
仔細觀察了配置文件,確實有這個配置啊,而且也通過spring的context:property-placeholder標簽引入的該配置文件:
但是就是報找不到這個屬性,於是,去問問度娘吧,原來,spring容器只會維護一個PropertyPlaceholderConfigurer的bean實例,當spring發現容器中有一個該實例后,就會忽略其余的,所以,該標簽只能配置一個,多余的spring會自動忽略。
問題知道了,那么怎么解決呢?
度娘的說法很簡單,只需要在context:property-placeholder標簽中添加一個屬性ignore-unresolvable="true"即可!
事實證明,我想的太簡單了,確實,這樣的做法大部分情況下就解決了上述報的錯誤,只要在所有的context:property-placeholder標簽上都加上ignore-unresolvable="true"屬性就可以了,可是我翻遍了我的項目,確保所有的context:property-placeholder標簽上都加上了這個屬性,可是還是報上述的錯誤,耐着性子,繼續找。。。
既然是配置文件方面報的錯,那就把重點放在配置文件的讀取上,於是我發現了數據庫的配置文件,是這么讀取的:
眼前是不是一亮,雖然不是context:property-placeholder標簽,但它也是一個PropertyPlaceholderConfigurer實例,那就沒跑了,肯定是你了,進去看一看,果然有這個屬性:
果斷的給它配置一個華麗麗的true:
再次啟動,完美。。。可以開心的去寫緩存了。。。