有人知道这是一种错误还是一种预期的行为。
如果您有一个组件
@Value("${foo}")
private String fooValue;这个配置:
<beans>
<context:annotation-config />
<context:component-scan base-package="org.mortar" />
<aop:aspectj-autoproxy />
<context:property-placeholder location="classpath:a.properties"/>
<context:property-placeholder location="classpath:b.properties"/>
</bean>你得到一个例外:
java.lang.IllegalArgumentException: Could not resolve placeholder 'foo' in string value "${foo}"如果您使用了singe上下文:property-占位符,它工作得很好:
<beans>
<context:annotation-config />
<context:component-scan base-package="org.mortar" />
<aop:aspectj-autoproxy />
<context:property-placeholder location="classpath:a.properties, classpath:b.properties"/>
</bean>发布于 2014-01-25 00:58:06
宣示
<context:property-placeholder location="classpath:a.properties"/>注册一个PropertySourcesPlaceholderConfigurer bean和一个名为PlaceholderResolvingStringValueResolver的内部类的bean。这些bean中的每一个在SpringEnvironment中注册了一个PropertySource。
Spring时,它必须解析String占位符${}值,然后遍历已注册的PlaceholderResolvingStringValueResolver bean。它使用它们的resolveStringValue方法解析占位符。如果它不能,那么它就会很快失败,即使另一个PlaceholderResolvingStringValueResolver可以解决它。
解决方案是使用单个<context:property-placeholder>,其中所有属性都在一个PropertySourcesPlaceholderConfigurer中注册。
或者,您可以使用属性ignore-unresolvable="true"声明它们。在这种情况下,如果一个人不能解决它,它不会抛出任何异常。相反,它将尝试下一个。但是,您可能会发现自己有一个未解决的属性,所以我不建议您这样做。
https://stackoverflow.com/questions/21344741
复制相似问题