1.遇到的問題:
配置redisSpringContext.xml 時,遇到 properties加載失敗,提示BeanDefinitionStoreException 和 java.lang.IllegalArgumentException: Could not resolve placeholder 'xxx' ,
找了很久都找不到原因,文件路徑和鍵名都沒寫錯,加載語法也沒有寫錯。。。這就很難受了。
直到檢查web.xml文件,,我猜測,是不是因為 springcontext-*.xml 這一類文件在 contextConfigLocation 里是共有的,不可以在不同的xml里加載不同的properties,而必須
在一個地方加載所有需要用到的properties文件,再由該類xml文件里共同使用。
巧的是,還真是這樣!!!
2.解決方法:
項目里,我在service層xml 里設置了redis配置,需要用到redis的properties文件,在dao層xml文件里設置了mysql配置,需要用到jdbc的properties文件,
都分別加載properties,造成了沖突,於是,我直接在service層里統一配置了properties文件,只要在springcontext-*.xml 這一類文件里都可以共同調用,
因此,properties的鍵值對寫法需要注意不要有鍵名相同!!!
3.xml 加載properties 文件的寫法:
方法一:
1 <context:property-placeholder location="classpath:redis.properties"/>
優點:內容簡潔。
缺點:只能在一類文件里加載一個 properties文件,加載多個會導致沖突,因此需要把所有配置信息寫在一個properties里才行,會看起來很雜。
方法二:
<!-- spring的屬性加載器,加載所有properties文件中的屬性,供所有springcontext-*.xml文件共同使用 --> <bean id="configPropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <!--這樣寫可以引入多個properties文件--> <!-- <value>/WEB-INF/configInfo.properties</value> --> <value>classpath:redis.properties</value> <value>classpath:jdbc.properties</value> </list> </property> </bean>
優點:可以統一加載多個需要用到的properties文件,配置信息可以分開多個properties寫會看起來很清晰。
缺點:內容太多,寫法太冗余。
4.調用方法:
不論那個寫法,都是一樣的調用方式
${鍵名}
使用示例:
參考博客原址:https://www.iteye.com/blog/raising-2203899