Grails ehcache和外部化配置

时间:2014-07-02 19:37:56

标签: caching grails config ehcache externalizing

我正在考虑在Grails应用程序中外部化ehcache的某些配置参数,而我正在遇到文档声称不应该工作的东西。

可能有些东西我不知道。

我使用grails ehcache插件版本1.0.1与Grails 2.4.0和grails缓存插件1.1.7。我正在使用hibernate插件3.6.10.16。

这是我在CacheConfig.groovy配置中的内容......

...
cacheManagerPeerProviderFactory {
    peerDiscovery 'automatic'
    factoryType 'rmi'
    multicastGroupAddress '${ehcacheMulticastGroupAddress}'
    multicastGroupPort '${ehcacheMulticastGroupPort}'
    timeToLive 'site'
}

我已启用调试级别日志记录,因此我可以看到它生成的XML。这是相关的片段:

<cacheManagerPeerProviderFactory class='net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory'
    properties="peerDiscovery=automatic,multicastGroupAddress=${ehcacheMulticastGroupAddress},multicastGroupPort=${ehcacheMulticastGroupPort},timeToLive=32"
    propertySeparator=','
/>

grails ehcache插件文档有以下注释,我希望&#34;证明&#34; ...

(note that ${ehcacheMulticastGroupAddress} and ${ehcacheMulticastGroupPort} are an Ehcache feature that lets you use system property names as variables to be resolved at runtime)

大。除了它在我启动应用程序时不起作用。由于以下

,它无法创建CacheManagerPeerProvider
...
Caused by UnknownHostException: ${ehcacheMulticastGroupAddress}
->>  901 | lookupAllHostAddr        in java.net.InetAddress$1
...

我在myApplication-config.groovy中为grails.config.locations分配值时指向的可访问区域中有Config.groovy个文件。但我不确定它是否正在努力真正插入该值。

我尝试过双引号,但它们也是一个坏主意 - 在解释时CacheConfig.groovy它没有看到我放入myApplication-config.groovy的配置。我知道它在某些时候成功地读取了该文件,因为我成功地使用它来驱动一些Quartz作业逻辑,因此该配置文件的放置可能不是问题。

1 个答案:

答案 0 :(得分:0)

答案是我需要为ehcache设置SYSTEM PROPERTIES才能找到。使用Grails配置文件(例如myApplication-config.groovy)完全不正确。

CacheConfig.groovy文件正确,它生成的XML也是如此。所以问题就变成了,首先如何正确设置它所寻找的属性?

我正在部署到Tomcat。对于Tomcat,在setenv.bat文件(或{nix上的setenv.sh)中设置系统属性最有意义。

我创建了setenv.bat,将以下内容添加到其中

set CATALINA_OPTS=%CATALINA_OPTS% -DehcacheMulticastGroupAddress=230.0.0.1 -DehcacheMulticastGroupPort=4446 -DehcachePeerListenerPort=40001

......它奏效了。 Ehcache能够找到系统属性并适当地启动所有内容。

tl; dr:系统属性!= grails应用程序配置