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

Другие вопросы по тегам