Pergunta

Estou desenvolvendo meu primeiro Grails plugin. Ele tem que acessar um webservice. O Plugin irá, obviamente, precisa a url webservice. Qual é a melhor maneira de configurar isso sem codificar que nas classes Groovy? Seria bom com configuração diferente para diferentes ambientes.

Foi útil?

Solução

Se o seu apenas uma pequena (leia-se: um item) opção de configuração, ele só poderia ser mais fácil de gole em um arquivo de propriedades. Se houver um número de opções de configuração, e alguns deles deve ser dinâmico, eu gostaria de sugerir fazendo o que o plugin Acegi segurança não - adicionar um arquivo para /grails-app/conf/plugin_name_config.groovy talvez.

vantagem adicional é que o usuário pode executar código Groovy para calcular suas opções de configuração (muito melhor sobre o uso de arquivos de propriedades), bem como ser capaz de fazer diferentes ambientes com facilidade.

http://groovy.codehaus.org/ConfigSlurper , que é o que Grails uso interno slurp configs 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

Outras dicas

Você pode querer Keep It Simple (tm). Você pode definir o URL diretamente no Config.groovy -incluindo settings- per-ambiente e acessá-lo a partir do seu plug-in, conforme necessário usando grailsApplication.config (na maioria dos casos) ou um objeto ConfigurationHolder.config (Veja mais detalhes no manual).

Como um bônus adicional que a configuração também pode ser definida em arquivos de propriedade padrão Java ou em outros arquivos de configuração especificados no grails.config.locations.

por exemplo. em 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
  }
}

depois, em um serviço prestado por seu plugin

import org.codehaus.groovy.grails.commons.ConfigurationHolder
class MyPluginService {
  def url = ConfigurationHolder.config.myPlugin.url
  // ...
} 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top