Springエラー:<br>:Could not resolve placeholder XXX in string value XXX


Spring redisとmongodbを同時に統合する際に複数のリソースファイルのロードに遭遇する問題
この2日間、プラットフォーム内のredisとmongodbの統合に問題が発生しました.
redisとmongodbを個別に統合する場合は正常にプログラムを起動できますが、2つが同時に統合されると次の問題が発生します.
Could not resolve placeholder 'mongo.port' in string value "${mongo.port}

いろいろ考えたあげく、いろいろなことを調べて、やっと問題の原因を見つけた.
springのxmlプロファイルに複数の*がある場合.propertiesファイルをロードする必要がある場合.
このように使うべきです
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

        <property name="locations">

            <list>

                <value>classpath*:mongodb.properties</value>

            </list>

        </property>

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

    </bean>

または
<context:property-placeholder location="classpath*:redis.properties" ignore-unresolvable="true" />

ただし、ignore-unresolvable="true"との2つの属性値はtrueである必要があります.
 
 
理由は次のとおりです(記事の最後のリンクから抜粋)
Spring容器は反射走査の発見機構を採用し、Spring容器にorgがあることを検出した.springframework.beans.factory.config.PropertyPlaceholderConfigurerのBeanは、残りのPropertyPlaceholderConfigurerのスキャンを停止します(Spring 3.1 PropertySources PlaceholderConfigurerがPropertyPlaceholderConfigurerの代わりに使用されています).というネーミングスペースベースの構成は、内部ではPropertyPlaceholderConfigurer Beanを作成するだけです.言い換えれば、Springコンテナは最大1つのP r e t y PlaceholderConfigurer()のみを定義することができ、残りはSpringに無視されます(実際にSpringは警告を提供すればいいのです). 
最後に、すべてのリソースファイルのリソースを一緒にロードすることについて説明します.
次のようになります.
 
#mongo     

mongo.host=192.168.111.230

mongo.port=40000

mongo.connectionsPerHost=8

mongo.threadsAllowedToBlockForConnectionMultiplier=4

mongo.connectTimeout=1500

mongo.maxWaitTime=1500

mongo.autoConnectRetry=true

mongo.socketKeepAlive=true

mongo.socketTimeout=1500

mongo.slaveOk=true

mongo.write.number=1

mongo.write.timeout=0

mongo.write.fsync=true



mongo.dbname=test



#redis     

redis.host=192.168.111.225  

redis.port=6379  

redis.pass=  

  

redis.maxIdle=300

redis.maxTotal=600

redis.minIdle=100  

しかし,このようなロードはシステムの分割に不利であり,結合が高いと考えられる.したがって、サブシステムごとに独自のリソースファイルを個別にロードすることをお勧めします.たとえば、次のようにします.
#mongo      

	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

		<property name="locations">

			<list>

				<value>classpath*:mongodb.properties</value>

			</list>

		</property>

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

	</bean>



#redis      

	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

		<property name="locations">

			<list>

				<value>classpath*:redis.properties</value>

			</list>

		</property>

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

	</bean>


 
ignoreUnresolvablePlaceholdersがtrueであるか、最後にfalseがロードされているかを保証すれば、以前はtrueであった.
 
参照先:http://www.myexception.cn/database/1705284.html
http://www.iteye.com/topic/1131688