2009-05-09 15 views
9

Sto sviluppando il mio primo plugin Grails. Deve accedere a un webservice. Il Plugin avrà ovviamente bisogno dell'URL del webservice. Qual è il modo migliore per configurarlo senza codificarlo nelle classi di Groovy? Sarebbe bello con diverse configurazioni per ambienti diversi.Configurazione del plugin Grails

risposta

7

Se è solo un'opzione di configurazione piccola (leggi: una voce), potrebbe essere semplicemente più semplice eseguire lo slurp in un file delle proprietà. Se ci sono alcune opzioni di configurazione e alcune di esse dovrebbero essere dinamiche, suggerirei di fare ciò che fa il plugin Acegi Security - aggiungere un file a /grails-app/conf/plugin_name_config.groovy forse.

un ulteriore vantaggio è che l'utente può eseguire codice groovy per calcolare le opzioni di configurazione (molto meglio rispetto all'utilizzo di file di proprietà), oltre a essere in grado di eseguire ambienti diversi con facilità.

check out http://groovy.codehaus.org/ConfigSlurper, che è ciò che Grails utilizza internamente per il consumo di config come 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

strana idea di avere file di configurazione separato solo per una proprietà, 'Config.groovy' deve essere utilizzato per quella proprietà. – tig

+2

@tig AFAIK, 'Config.groovy' viene omesso quando il plugin è impacchettato, e piuttosto per testare il plugin che non configurarlo, no? – peterp

13

Si consiglia di mantenerlo semplice (tm). È possibile definire l'URL direttamente in Config.groovy, incluse le impostazioni per l'ambiente, e accedervi dal proprio plug-in secondo necessità, utilizzando grailsApplication.config (nella maggior parte dei casi) o un oggetto ConfigurationHolder.config (per ulteriori informazioni, vedere details in the manual).

Come ulteriore vantaggio che l'impostazione può anche essere definita in file di proprietà Java standard o su altri file di configurazione specificati in grails.config.locations.

ad es. in 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 
    } 
} 

più tardi, in un servizio fornito da vostro plugin

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