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
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
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
// ...
}
strana idea di avere file di configurazione separato solo per una proprietà, 'Config.groovy' deve essere utilizzato per quella proprietà. – tig
@tig AFAIK, 'Config.groovy' viene omesso quando il plugin è impacchettato, e piuttosto per testare il plugin che non configurarlo, no? – peterp