Настройка плагина Grails
Вопрос
Я разрабатываю свой первый плагин 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
// ...
}