1

他のファイルのプロパティ プレースホルダーに依存する多数の Spring ファイルがあります。基本的に、次のような 3 つの XML ファイルがあります。

one.xml :

<?xml version="1.0"?>
<beans ...>

    <import resource="two.xml"/>

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>/WEB-INF/your.properties</value>
            </list>
        </property>
    </bean>

    <bean id="clasher" class="whatever.Clash">
        <property name="name" value="${route.one}"/>
    </bean>
</beans>

two.xml :

<?xml version="1.0"?>
<beans ...>

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>/WEB-INF/my.properties</value>
            </list>
        </property>
    </bean>
</beans>

my.properties :

route.one = Why Not?

your.properties :

entirely.unrelated = true

基本的に次のようなエラーが表示されます。

Exception in thread "Launcher:/serverling" org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'clasher' defined in ServletContext resource [/WEB-INF/one.xml]: Could not resolve placeholder 'route.one'
    at org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.processProperties(PropertyPlaceholderConfigurer.java:287)
    at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:75)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:663)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:638)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:407)
    at org.red5.server.tomcat.TomcatLoader$1.run(TomcatLoader.java:594)

プロパティ プレースホルダーをコンテナー全体に継承させる方法はありますか?

私の最初の想定では、コンテナーはどのファイル Bean が存在するかをあまり気にしないため、単純にすべての Bean を構成し、コンテナー内で定義されたすべての Bean を実行し、複数のプロパティ プレースホルダー コンフィギュアラーを使用してそれらを埋めます。

この例が機能しないのはなぜですか L

4

2 に答える 2

3

にこのフラグを設定しPropertyPlaceHolderConfigurerます:

<property name="ignoreUnresolvablePlaceholders" value="true"/>
于 2012-06-05T21:26:29.040 に答える
0

各 Bean にPropertyPlaceholderConfigurerID (または少なくとも 1 つ) を与えるだけで問題ありません。私の推測では、Bean ID が宣言されていない場合、一方が他方をオーバーライドするため、いくつかのプロパティ値が失われます。注釈ベースのテキスト コンテキストで使用している場合は、この問題を考慮してください。ここでは、プロパティ コンフィギュアラーの複数のインスタンスのより微調整された使用法も示します。

于 2012-06-05T20:45:18.583 に答える