Spring报Could not resolve placeholder解决法
经常有在一个xml文件内需要引入大于1个properties资源文件的情况,但会在启动应用服务器是报Could not resolve placeholder错误,除去properites文件路径错误、拼写错误外,出现"Could not resolve placeholder"很有可能是使用了多个PropertyPlaceholderConfigurer或者多个<context:property-placeholder>的原因。
操作方法
- 01
比如我有一个dao.xml读取dbConnect.properties,还有一个dfs.xml读取dfsManager.properties,然后web.xml统一load这两个xml文件
- 02
如果这两个xml文件中分别有 <!-- dao.xml --> <context:property-placeholder location="WEB-INF/config/db/dbConnect.properties" /> <!-- dfs.xml --> <context:property-placeholder location="WEB-INF/config/dfs/dfsManager.properties" /> 那么,一定会出"Could not resolve placeholder"。
- 03
一定要记住,不管是在一个spring文件还是在多个Spring文件被统一load的情况下,直接写 <context:property-placeholder location="" /> <context:property-placeholder location="" /> 是不允许的。
- 04
解决方案: (1) 在Spring 3.0中,可以写: <context:property-placeholder location="xxx.properties" ignore-unresolvable="true" /> <context:property-placeholder location="yyy.properties" ignore-unresolvable="true" /> 注意两个都要加上ignore-unresolvable="true",一个加另一个不加也是不行的。
- 05
(2) 在Spring 2.5中,<context:property-placeholder>没有ignore-unresolvable属性,此时可以改用PropertyPlaceholderConfigurer。其实<context:property-placeholder location="xxx.properties" ignore-unresolvable="true" />与下面的配置是等价的。 <bean id="随便" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="xxx.properties" /> <property name="ignoreUnresolvablePlaceholders" value="true" /> </bean> 正因为如此,写多个PropertyPlaceholderConfigurer不加ignoreUnresolvablePlaceholders属性也是一样会出"Could not resolve placeholder"。