Grails ehcache и внешняя конфигурация
Я смотрю на экстернализацию определенных параметров конфигурации для ehcache в нашем приложении Grails и сталкиваюсь с чем-то, что не работает, на что должна претендовать документация.
Скорее всего, мне чего-то не хватает.
Я использую плагин 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 есть следующее примечание, которое я надеялся "доказать"...
(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 ответ
Ответ заключается в том, что мне нужно установить СИСТЕМНЫЕ СВОЙСТВА для ehcache, чтобы найти. Использование файлов конфигурации Grails, таких как myApplication-config.groovy
совершенно неверно.
CacheConfig.groovy
файл правильный, как и XML, который он генерирует. Таким образом, возникает вопрос, как правильно настроить свойства, которые он ищет?
Я разворачиваюсь в Tomcat. Для Tomcat установка системных свойств наиболее целесообразна в setenv.bat
файл (или setenv.sh
на *nix).
я создал setenv.bat
вставьте в него следующее
set CATALINA_OPTS=%CATALINA_OPTS% -DehcacheMulticastGroupAddress=230.0.0.1 -DehcacheMulticastGroupPort=4446 -DehcachePeerListenerPort=40001
... И это сработало. Ehcache смог найти системные свойства и запустить все соответствующим образом.
tl; dr: системные свойства!= конфигурация приложения grails