配置Grails插件

Kim*_*ble 9 grails plugins config

我正在开发我的第一个Grails插件.它必须访问Web服务.插件显然需要webservice url.在没有将其编码到Groovy类中的情况下配置它的最佳方法是什么?对于不同的环境,不同的配置会很好.

cod*_*ead 13

您可能希望保持简单(tm).您可以直接在Config.groovy中定义URL(包括每个环境设置),并根据需要使用grailsApplication.config(在大多数情况下)或ConfigurationHolder.config对象从插件中访问它(请参阅手册中的更多详细信息).

作为额外的好处,还可以在标准Java属性文件或grails.config.locations中指定的其他配置文件中定义设置.

例如在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
  }
}
Run Code Online (Sandbox Code Playgroud)

稍后,在您的插件提供的服务中

import org.codehaus.groovy.grails.commons.ConfigurationHolder
class MyPluginService {
  def url = ConfigurationHolder.config.myPlugin.url
  // ...
} 
Run Code Online (Sandbox Code Playgroud)


Chi*_*hii 7

如果它只是一个小的(读取:一项)配置选项,它可能更容易在属性文件中啜食.如果有一些配置选项,其中一些应该是动态的,我建议做一下Acegi Security插件的工作 - 或者将文件添加到/grails-app/conf/plugin_name_config.groovy.

额外的好处是用户可以执行groovy代码来计算他们的配置选项(比使用属性文件好得多),以及能够轻松地执行不同的环境.

查看http://groovy.codehaus.org/ConfigSlurper,这是grails内部使用的配置文件,如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
Run Code Online (Sandbox Code Playgroud)

  • 打包插件时,省略了@tig AFAIK,`Config.groovy`,而不是测试插件而不是配置插件,不是吗? (2认同)