名称为&mongo'的bean定义无效。以null定义:无法解析占位符&mongo.port'在字符串值" $ {mongo.port}"

时间:2014-07-17 11:48:50

标签: spring

我得到了例外

 Invalid bean definition with name 'mongo' defined in null: Could not resolve placeholder 'mongo.port' in string value "${mongo.port}"

当我尝试部署我的应用程序时

重点是我尝试使用属性文件中的值替换属性占位符。 Coud你指出缺少什么?

我的申请背景是

<beans xmlns="http://www.springframework.org/schema/beans"  ...>

<util:properties id="propertiesFile" location="classpath:properties/base.properties"/>

<import resource="mongodb-config.xml"/>

<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
<property name="scopes">
    <map>
        <entry key="session">
            <bean class="org.springframework.context.support.SimpleThreadScope"/>
        </entry>
    </map>
</property>
</bean>

</beans>

我的base.properties是

 mongo.host=${profils.mongo.host}
 mongo.port=${profils.mongo.port}
 mongo.dbname=${profils.mongo.dbname}

并且mongodb-config.xml是

<mongo:mongo host="${mongo.host}" port="${mongo.port}" />
<mongo:db-factory dbname="${mongo.dbname}" />

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
            <property name="writeConcern">
                <util:constant static-field="com.mongodb.WriteConcern.SAFE" ></util:constant>
            </property>
</bean>

此外,在pom.xml中有

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <encoding>${project.build.sourceEncoding}</encoding>
            </configuration>
        </plugin>
    </plugins>
     <resources>
        <resource>
            <filtering>true</filtering>
            <directory>src/main/resources</directory>

        </resource>
    </resources>

    <filters>
        <filter>
            src/main/filters/filter-default.properties
        </filter>
    </filters>
     <finalName>base</finalName>
</build>

和filter-default.properties是:

profils.mongo.host=127.0.0.1
profils.mongo.port=27017
profils.mongo.dbname=base

编辑:

在目标文件夹中,

正确替换了值

mongo.host=127.0.0.1
mongo.port=27017
mongo.dbname=base

但似乎没有考虑到它们

insted of location =“classpath:properties / base.properties”,我尝试使用

 <util:properties id="propertiesFile" location="file:///D:/base/target/base/WEB-INF/classes/properties/base.properties"/>

 <context:property-placeholder location="file:///D:/base/target/base/WEB-INF/classes/properties/base.properties"/>

但那不起作用

1 个答案:

答案 0 :(得分:2)

当我切换到Java配置时,我不再使用XML配置了;但是在一个使用XML配置的旧项目中,我使用的是:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
  <bean id="myBean" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="systemPropertiesMode" value="2" />
    <property name="ignoreResourceNotFound" value="true" />
    <property name="locations"><list>
      <value>classpath:foobar.properties</value>
    </list></property>
    <property name="properties"><props>
      <prop key="aProperty">value</prop>
    </props></property>
  </bean>
</beans>

它似乎有效,但它在自己的XML文件中,而后者又被包含在内。我不认为找不到你的变量的原因。