首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring 3.2.*,错误解析多个<上下文的占位符:属性-占位符>

Spring 3.2.*,错误解析多个<上下文的占位符:属性-占位符>
EN

Stack Overflow用户
提问于 2014-01-25 00:06:06
回答 1查看 1.1K关注 0票数 2

有人知道这是一种错误还是一种预期的行为。

如果您有一个组件

代码语言:javascript
复制
@Value("${foo}")
private String fooValue;

这个配置:

代码语言:javascript
复制
<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>

你得到一个例外:

代码语言:javascript
复制
java.lang.IllegalArgumentException: Could not resolve placeholder 'foo' in string value "${foo}"

如果您使用了singe上下文:property-占位符,它工作得很好:

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-25 00:58:06

宣示

代码语言:javascript
复制
<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"声明它们。在这种情况下,如果一个人不能解决它,它不会抛出任何异常。相反,它将尝试下一个。但是,您可能会发现自己有一个未解决的属性,所以我不建议您这样做。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21344741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档