1

我正在考虑在我们的 Grails 应用程序中外部化 ehcache 的某些配置参数,但我遇到了文档声称应该解决的问题。

可能有一些我想念的东西。

我将 grails ehcache 插件版本 1.0.1 与 Grails 2.4.0 和 grails 缓存插件 1.1.7 一起使用。我正在使用休眠插件 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 插件文档有以下注释,我希望“证明”...

(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位于可访问区域的文件,我在为 in 分配值时指向该grails.config.locations区域Config.groovy。但我不确定它是否正在努力真正插入该值。

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

4

1 回答 1

0

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

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

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

我创建setenv.bat,将以下内容放入其中

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

......它奏效了。Ehcache 能够找到系统属性并正确启动一切。

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

于 2014-07-03T17:08:12.857 回答