我正在考虑在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作业逻辑,因此该配置文件的放置可能不是问题。
答案 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应用程序配置