在Spring框架内的ehcache.xml文件中外化terracottaconfig属性

时间:2012-07-06 23:47:01

标签: java spring ehcache terracotta

spring web应用程序中的ehcache.xml文件中有这个标记<terracottaConfig url="host1:9510,host2:9510,host3:9510"/>。我想外化此标记的url属性。 URL的值应替换为外部文件的属性。如果您建议解决此问题,将会非常有帮助。

1 个答案:

答案 0 :(得分:3)

你可以放这样的东西 - <terracottaConfig url="${terracotta.config.location}" />,但最重要的是,这只会加载from the system properties。它不是从PropertyPlaceHolder解析的,因为它不是Spring配置文件。

因此,如果您想使用外部配置文件,您将基本上必须在Spring应用程序开始加载ehcache.xml文件之前以编程方式设置此系统属性 - 一种方法是编写您的自定义{{3加载属性文件并根据它设置系统属性,这样当加载ehcache.xml时它就能正确解析占位符。


你的回答帮助我解决了我的问题。我只是想添加,而不是通过程序设置系统属性,我使用util:属性如下

<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>