2009-05-09 10 views
9

Estoy desarrollando mi primer complemento Grails. Tiene que acceder a un servicio web. El complemento obviamente necesitará la URL del servicio web. ¿Cuál es la mejor manera de configurar esto sin tener que codificarlo en las clases de Groovy? Sería bueno con diferentes configuraciones para diferentes entornos.Configuración del complemento Grails

Respuesta

7

Si solo es una opción de configuración pequeña (léase: un elemento), podría ser más fácil sorber en un archivo de propiedades. Si hay varias opciones de configuración, y algunas de ellas deberían ser dinámicas, sugeriría hacer lo que hace el complemento Acegi Security: agregar un archivo a /grails-app/conf/plugin_name_config.groovy quizás.

bono adicional es que el usuario puede ejecutar código groovy para calcular sus opciones de configuración (mucho mejor que usar archivos de propiedades), así como poder hacer diferentes entornos con facilidad.

echa un vistazo a http://groovy.codehaus.org/ConfigSlurper, que es lo que los griales usan internamente para emitir configuraciones como 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

extraña idea de tener el archivo de configuración por separado sólo por una propiedad, 'Config.groovy' debe utilizarse para esa propiedad. – tig

+2

@tig AFAIK, 'Config.groovy' se omite cuando el complemento está empaquetado, y más bien para probar el complemento que para configurarlo, ¿no? – peterp

13

Es posible que desee mantenerlo simple (tm). Puede definir la URL directamente en Config.groovy, incluida la configuración por entorno, y acceder desde su complemento según sea necesario utilizando grailsApplication.config (en la mayoría de los casos) o un objeto ConfigurationHolder.config (consulte más información en details in the manual).

Como una ventaja adicional, esa configuración también se puede definir en archivos de propiedades estándar de Java o en otros archivos de configuración especificados en grails.config.locations.

p. Ej. en 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 
    } 
} 

más tarde, en un servicio proporcionado por el plugin

import org.codehaus.groovy.grails.commons.ConfigurationHolder 
class MyPluginService { 
    def url = ConfigurationHolder.config.myPlugin.url 
    // ... 
} 
Cuestiones relacionadas