2

このタグ<terracottaConfig url="host1:9510,host2:9510,host3:9510"/>は、SpringWebアプリケーション内のehcache.xmlファイルにあります。このタグのurl属性を外部化したい。URLの値は、外部ファイルのプロパティに置き換える必要があります。この問題の解決策を提案すると非常に役立ちます。

4

1 に答える 1

3

このようなものを入れることができますが 、大きな問題は、これがシステム プロパティから<terracottaConfig url="${terracotta.config.location}" />のみ読み込まれることです。Spring 構成ファイルではないため、PropertyPlaceHolder から解決されません。

したがって、外部構成ファイルを使用する場合は、基本的に、Spring アプリケーションが ehcache.xml ファイルのロードを開始する前に、このシステム プロパティをプログラムで設定する必要があります。これを行う 1 つの方法は、カスタムServletContextListenerを記述してプロパティをロードすることです。ファイルを作成し、それに基づいてシステム プロパティを設定します。このようにして、ehcache.xml が読み込まれると、プレース ホルダーを適切に解決できます。


あなたの答えは私の問題を解決するのに役立ちました。プログラムを介してシステムプロパティを設定する代わりに、それを追加したいだけです。次のように util:properties を使用しています

<bean id="sysProperties" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
       <property name="targetObject" value="#{@systemProperties}"/>
       <property name="targetMethod" value="putAll"/>
       <property name="arguments">
           <util:properties>
               <prop key="propertyname_used_in_ecache_xml">#{proerties_defined_using_property_factory['propertyname_defined_in_external_properties_file']}</prop>
           </util:properties>
       </property>
    </bean>

    <bean id="cacheManager"
        class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" depends-on="sysProperties">
        <property name="configLocation">
            <value>classpath:ehcache.xml</value>
        </property>
    </bean>
于 2012-07-07T03:30:47.787 に答える