最近發(fā)現(xiàn)不能多個(gè)context:property-placeholder來注入properties文件:
項(xiàng)目Common (通用項(xiàng)目)
config.properties
spring.xml (注入config.properties文件, 通過${xxxx}來注入bean屬性 )
項(xiàng)目SpringData(數(shù)據(jù)層)
database.properties
springdata.xml (注入database.properties文件,通過${xxxx}來注入bean 屬性)
項(xiàng)目Web (引用SpringData與Common項(xiàng)目)
web.properties
spring-mvc.xml ( 引用Common項(xiàng)目的spring.xml 和SpringData項(xiàng)目的springdata.xml )
<pre>
<import location="classpath:spring.xml" />
<import location="classpath:springdata.xml" />
</pre>
問題:
加載Web項(xiàng)目時(shí)會(huì)提示Could not resolve placeholder 'xxx.yyy' in string value "${xxx.yyy}"
查看日志,沒有發(fā)現(xiàn)應(yīng)該要加載properties文件被加載,而只加載了common項(xiàng)目下的config.properties文件
按照Web項(xiàng)目配置文件spring-mvc.xml
先import Common項(xiàng)目spring.xml文件
后import SpringData項(xiàng)目springdata.xml文件
的順序,只加載了config.properties文件,后面的都被忽略掉。
找了一下資料:
http://www.iteye.com/topic/1131688
https://segmentfault.com/q/1010000006823872
發(fā)現(xiàn)第一個(gè)第二個(gè)properties文件(Common/spring.xml和SpringData/database.properties)
需要設(shè)置ignore-unresolved=true,第三個(gè)文件(Web/config.properites)才會(huì)被加載,這個(gè)ignore-unresolved屬性就好像html dom模型里的冒泡事件一樣,每觸發(fā)一次事件都由這個(gè)事件來決定事件消息是否冒泡傳遞到上一級(jí)。
但這種方式有可能出現(xiàn)加載順序混亂的情況,所以使用以下方式最好:
Common/Spring.xml 不再注入config.properties文件
SpringData/SpringData.xml 不再注入database.properties文件
所有的properties加載由web/spring-mvc.xml 來統(tǒng)一注入:
<pre>
<context:property-placeholder
location="classpath:config.properties,classpath:database.properties,classpath:web.properties" />
<import location="classpath:spring.xml" />
<import location="classpath:springdata.xml" />
</pre>
這樣就很好的告訴給spring容器應(yīng)該加載什么文件,以及加載順序。