Spring Web 应用程序内的 ehcache.xml 文件中有此标记<terracottaConfig url="host1:9510,host2:9510,host3:9510"/>
。我想将此标签的 url 属性外部化。URL 的值应替换为来自外部文件的属性。如果您对此问题提出任何解决方案,这将非常有帮助。
问问题
2009 次
1 回答
3
你可以放这样的东西——
<terracottaConfig url="${terracotta.config.location}" />
但最大的问题是它只能从系统属性中加载。它不是从 PropertyPlaceHolder 解析的,因为它不是 Spring 配置文件。
因此,如果您想使用外部配置文件,您基本上必须在 Spring 应用程序开始加载 ehcache.xml 文件之前以编程方式设置此系统属性 - 一种方法是编写您的自定义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 回答