Вопрос

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

Это было полезно?

Решение

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

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

проверьте 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

Другие советы

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

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

например ,в конфигурации.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
  // ...
} 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top