由Could not resolve placeholder 'xxx.xxx' in string value "${xxx.xxx}引發的項目中配置文件那些事

近日在編寫基於SOA的商城項目,項目由父工程及若干子模塊構成,在編寫過程中,爲了相互協作及維護方便,於是將一些連接地址信息抽取出來單獨放在配置文件中,並且放到了common公用模塊內
環境描述
在dubbo中兩個xml文件需要各自引入自己的配置於是分別寫了如下引入

<!-- application-dubbo.xml 中 -->  
<context:property-placeholder location="classpath:dubbo.properties" />  
  
<!--application-jedis.xml 中-->  
<context:property-placeholder location="classpath:jedis.properties" />  

於是啓動dubbo服務:Main.main(args)。
控制檯中報錯:
Could not resolve placeholder ‘xxx.xxx’ in string value "${xxx.xxx}
經過調試,證明不是找不到文件,排除properites文件路徑錯誤、拼寫錯誤。
查閱網上資料有如下描述:
一定要記住,不管是在一個Spring文件還是在多個Spring文件被統一load的情況下,直接寫:

<context:property-placeholder location="" />  
<context:property-placeholder location="" />   

是不允許的,這樣的引入方式會造成衝突。

  1. 解決衝突:
<context:property-placeholder location="classpath:dubbo.properties" ignore-unresolvable="true" />

添加了ignore-unresolvable="true"屬性,注意,所有引入的地方都要添加,即使一個添加另一個不添加也不行。

  1. 另外,對於web項目:如果項目中引入了其他jar的配置文件properties,那麼可以在web.xml中配置:
<!-- 上下文參數 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<!-- classpath:表示從當前項目加載  classpath*表示從當前項目及依賴的jar中加載,當所依賴的工具類例如redis又想從中加載配置文件時,可以考慮此用法  -->
		<param-value>classpath*:applicationContext-*.xml</param-value>
	</context-param>

總結一下,項目中多個spring文件分別引入各自對應的properties或yml配置,應在引入出添加ignore-unresolvable屬性值爲true。
web項目需要引入依賴jar中的配置文件,則在web.xml中contextConfigLocation參數設置爲classpath*:applicationContext-*.xml,classpath後面的星號很重要。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章