Конфигурация плагина Grails - PullRequest
9 голосов
/ 09 мая 2009

Я разрабатываю свой первый плагин Grails. Он должен получить доступ к веб-сервису. Плагину, очевидно, понадобится URL веб-сервиса. Каков наилучший способ настроить это без жесткого кодирования в классы Groovy? Было бы неплохо с разными конфигами для разных сред.

Ответы [ 2 ]

13 голосов
/ 10 мая 2009

Возможно, вы захотите сохранить его простым (тм). Вы можете определить URL-адрес непосредственно в Config.groovy, включая параметры среды, и обращаться к нему из своего плагина по мере необходимости, используя grailsApplication.config (в большинстве случаев) или объект ConfigurationHolder.config (подробнее см. в руководстве). ).

В качестве дополнительного бонуса эта настройка также может быть определена в стандартных файлах свойств Java или в других файлах конфигурации, указанных в grails.config.locations.

например. в Config.groovy

// This will be the default value...
myPlugin.url=http://somewhe.re/test/endpoint
environments {
  production {
    // ...except when running in production mode
    myPlugin.url=http://somewhe.re/for-real/endpoint
  }
}

позже, в сервисе, предоставляемом вашим плагином

import org.codehaus.groovy.grails.commons.ConfigurationHolder
class MyPluginService {
  def url = ConfigurationHolder.config.myPlugin.url
  // ...
} 
7 голосов
/ 09 мая 2009

Если это только небольшая (читай: один элемент) опция конфигурации, возможно, будет проще замешать в файле свойств. Если есть несколько параметров конфигурации, и некоторые из них должны быть динамическими, я бы предложил сделать то, что делает плагин Acegi Security - возможно, добавьте файл в /grails-app/conf/plugin_name_config.groovy.

дополнительным бонусом является то, что пользователь может выполнять отличный код для вычисления своих параметров конфигурации (намного лучше, чем при использовании файлов свойств), а также с легкостью создавать различные среды.

check http://groovy.codehaus.org/ConfigSlurper, то есть то, что внутренне использует Grails, чтобы отсеивать конфиги, такие как config.groovy.

//e.g. in /grails-app/conf/MyWebServicePluginConfig.groovy
somePluginName {
   production {
      property1 = "some string"
   }
   test {
      property1 = "another"
   }
}

//in your myWebServicePlugin.groovy file, perhaps in the doWithSpring closure
GroovyClassLoader classLoader = new GroovyClassLoader(getClass().getClassLoader())
ConfigObject config
try {
   config = new ConfigSlurper().parse(classLoader.loadClass('MyWebServicePluginConfig'))
} catch (Exception e) {/*??handle or what? use default here?*/}
assert config.test.property1.equals("another") == true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...