【发布时间】:2013-02-07 21:57:16
【问题描述】:
我正在尝试根据环境变量将我的应用程序设置为使用不同的数据源定义,但我遇到了以下错误。我查看了许多类似的问题,但它们似乎并不相同。
我已经设置了多个属性文件:
env-dev.properties
env-test.properties
env-prod.properties
env-.properties
我创建了一个名为 MEM_ENV 的系统属性,其值为“dev”
我的 spring xml 文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:property-placeholder
location="classpath*:*env-${MEM_ENV}.properties" />
<bean id="mongoDataSource" class="com.iLearn.persistence.base.MongoDataSourceImpl">
<property name="server" value="${mongo.server}" />
<property name="port" value="${mongo.port}" />
<property name="dbName" value="${mongo.dbName}" />
<property name="userName" value="${mongo.userName}" />
<property name="password" value="${mongo.password}" />
</bean>
我的属性文件如下所示:
mongo.server=aServer.com
mongo.port=10003
monog.dbName=aDBName
mongo.userName=aUserName
mongo.password=aPassword
我得到的例外是:
message org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'mongoDataSource' defined in class path resource [springAppConfig.xml]: Could not resolve placeholder 'mongo.server' in string value "${mongo.server}"
description The server encountered an internal error (org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'mongoDataSource' defined in class path resource [springAppConfig.xml]: Could not resolve placeholder 'mongo.server' in string value "${mongo.server}") that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'mongoDataSource' defined in class path resource [springAppConfig.xml]: Could not resolve placeholder 'mongo.server' in string value "${mongo.server}"
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:357)
com.iLearn.security.AccessFilter.doFilter(AccessFilter.java:43)
【问题讨论】:
-
对了,我用的是Spring 3.2.1.Release版
-
试试 location="classpath:/env-${MEM_ENV}.properties" />
-
它不起作用 - 它会创建一个不同的异常 - FileNotFound
-
好的,这意味着前面的文件已经被解析了,所以您只需要确定 MEM_ENV 系统变量的正确值,并且 mongo.server 属性是在 env-dev.properties 中定义的文件,我在这里看不到其他案例。
-
我在想同样的事情,但我似乎看不出问题所在,所以我想我会看看我是否遗漏了一些更微妙的东西。
标签: java database spring properties environment-variables