java - 如何在 Spring 上下文文件中使用带有属性文件的环境变量

标签 java spring spring-mvc properties

我正在尝试读取基于系统环境变量的配置文件。我的环境变量是 FOO_ENV,值为 devdev.properties 包含属性 bar.host bar.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 未找到。

最佳答案

您实际上在此处定义了两个 PropertyPlaceHolderConfigurer。一种是通过上下文命名空间,另一种是显式的。 Spring 可能会选择通过上下文命名空间创建的那个。您可以在上下文标记上设置“ignore-unresolvable”并像这样删除您的 propertyConfigurer bean:

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

或者,如果您需要对 PropertyPlaceHolderConfigurer 进行更多控制,请采用另一种方式并删除 context:property-placeholder 标记。

关于java - 如何在 Spring 上下文文件中使用带有属性文件的环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21708123/

相关文章:

java - 帮我把这个 Java 函数转换成 C++

java - java SWING应用程序的设计问题

java - Android Java - 为数组赋值时出现问题

java - 为什么 Spring Data REST 包含 "duplicate"链接?

java - C和java中的AES字符串加密/解密

java - 如何获取带注解的方法参数和他的注解

java - 如何在 hibernate 中使用一对一映射执行插入

java - 为什么我收到 "Value [null] cannot be converted to a JRDataSource"异常

java - Hibernate异常: saveOrUpdate is not valid without active transaction

java - Hibernate Criteria 查询 select where 子句