【问题标题】:How to use environment variables with properties file in Spring context file如何在 Spring 上下文文件中将环境变量与属性文件一起使用
【发布时间】:2014-02-11 16:58:40
【问题描述】:

我正在尝试读取基于系统环境变量的配置文件。我的环境变量是FOO_ENV,其值为devdev.properties 包含属性bar.hostbar.port

<context:property-placeholder /> 
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:${FOO_ENV}.properties"></property>
    <property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>

<bean id="myServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
    <property name="ignoreUnresolvablePlaceholders" value="true" />
    <constructor-arg type="String" value="http://${my.host}:${my.port}/" />
</bean>

当我在 tomcat 中部署它时,我收到以下错误:

11:48:39.324 [localhost-startStop-14] ERROR o.s.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'myServer' defined in ServletContext resource [/WEB-INF/my-context.xml]: 
    Could not resolve placeholder 'my.host' in string value [http://${my.host}:${my.port}]
    at org.springframework.beans.factory.config.PlaceholderConfigurerSupport.doProcessProperties(PlaceholderConfigurerSupport.java:209) ~[spring-beans-3.1.2.RELEASE.jar:3.1.2.RELEASE]

通过将上下文文件中的$FOO_ENV 替换为dev,我确定可以正确读取属性文件。通过将FOO_ENV 更改为其他名称,我可以表明 Spring 正在读取环境变量。

似乎元素

<property name="ignoreUnresolvablePlaceholders" value="true" />

应该让Spring忽略${my.host}不是环境变量,但是虽然我在各个地方都试过了,但还是报同样的错误,表示找不到my.host

【问题讨论】:

  • 我认为 myServer 上的 'ignoreUnresolvablePlaceholders' 属性是复制/粘贴错误?
  • 实际上,由于我不确定它应该去哪里(找不到任何明确的解释),我已经尝试使用 propertyConfigurer 和带有无法解析的属性。

标签: java spring spring-mvc properties


【解决方案1】:

您实际上在这里定义了两个 PropertyPlaceHolderConfigurer。一种通过上下文命名空间,一种通过显式方式。 Spring 可能会选择通过上下文命名空间创建的那个。您可以在上下文标签上设置“ignore-unresolvable”并删除您的 propertyConfigurer bean,如下所示:

<context:property-placeholder ignore-unresolvable="true"/>

或者,如果您需要对 PropertyPlaceHolderConfigurer 进行更多控制,请另辟蹊径并删除 context:property-placeholder 标记。

【讨论】:

  • ignore-unresolvable 为我工作。有没有办法我可以在文档中发现这一点?
猜你喜欢
  • 2017-12-26
  • 2018-03-22
  • 2014-02-11
  • 1970-01-01
  • 2020-07-23
  • 2018-05-25
  • 2020-05-31
  • 2017-10-29
  • 2020-09-15
相关资源
最近更新 更多