Domanda

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

È stato utile?

Soluzione

Se si tratta solo di un'opzione di configurazione piccola (leggi: un elemento), potrebbe essere più semplice assimilare un file delle proprietà. Se ci sono un certo numero di opzioni di configurazione, e alcune dovrebbero essere dinamiche, suggerirei di fare ciò che fa il plugin Acegi Security: forse aggiungere un file a /grails-app/conf/plugin_name_config.groovy.

vantaggio aggiunto è che l'utente può eseguire il codice groovy per calcolare le proprie opzioni di configurazione (molto meglio rispetto all'utilizzo dei file delle proprietà), oltre a essere in grado di fare facilmente diversi ambienti.

controlla http://groovy.codehaus.org/ConfigSlurper , che è ciò che i graal usano internamente per consumare 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

Altri suggerimenti

Potresti voler mantenerlo semplice (tm). Puoi definire l'URL direttamente in Config.groovy -includendo le impostazioni per ambiente- e accedervi dal tuo plug-in secondo necessità usando grailsApplication.config (nella maggior parte dei casi) o un oggetto ConfigurationHolder.config (vedi più avanti dettagli nel manuale ).

Come bonus aggiuntivo questa impostazione può anche essere definita nei file delle proprietà Java standard o in altri file di configurazione specificati in grails.config.locations.

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
  }
}

in seguito, in un servizio fornito dal plug-in

import org.codehaus.groovy.grails.commons.ConfigurationHolder
class MyPluginService {
  def url = ConfigurationHolder.config.myPlugin.url
  // ...
} 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top