我得到了例外
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"/>
但那不起作用
答案 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文件中,而后者又被包含在内。我不认为找不到你的变量的原因。