2009-05-09 8 views
9

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

ответ

7

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

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

check out http://groovy.codehaus.org/ConfigSlurper, который является тем, что grails внутренне используют для slurp конфигураций, таких как 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 
+0

Странная идея иметь отдельный конфигурационный файл только для одного свойства, 'Config.groovy' следует использовать для этого свойства. – tig

+2

@tig AFAIK, 'Config.groovy' опущен, когда плагин упакован, а скорее для тестирования плагина, чем для его настройки, нет? – peterp

13

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

В качестве дополнительного бонуса этот параметр также может быть определен в стандартных файлах свойств 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 
    // ... 
} 
Смежные вопросы