代码之家  ›  专栏  ›  技术社区  ›  Kimble

Grails插件配置

  •  9
  • Kimble  · 技术社区  · 16 年前

    我正在开发我的第一个Grails插件。它必须访问Web服务。插件显然需要WebService URL。在不将其硬编码到groovy类中的情况下,最好的配置方法是什么?对于不同的环境,使用不同的配置会更好。

    2 回复  |  直到 16 年前
        1
  •  7
  •   Chii    16 年前

    如果它只是一个小的(read:one-item)配置选项,那么它可能更容易在属性文件中发出声音。如果有一些配置选项,其中一些应该是动态的,那么我建议您执行acegi安全插件所做的操作-可能将文件添加到/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
    
        2
  •  13
  •   codehead    16 年前

    你可能想保持简单(tm)。您可以在config.groovy中直接定义URL(包括每个环境的设置),并根据需要使用grailapplication.config(在大多数情况下)或configurationholder.config对象从插件中访问它(请参阅进一步的 details in the manual )

    作为一个额外的好处,设置也可以在标准Java属性文件中定义,或者在GRAIL.SCONTION位置指定的其他配置文件中定义。

    例如,在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
      }
    }
    

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

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