2009-05-09 180 views
9

我正在開發我的第一個Grails插件。它必須訪問一個web服務。該插件顯然需要webservice url。在沒有將其硬編碼到Groovy類的情況下配置它的最佳方式是什麼?對於不同的環境使用不同的配置會很好。配置Grails插件

回答

7

如果它只有一個小(閱讀:一個項目)配置選項,它可能更容易在屬性文件中啜泣。如果有一些配置選項,並且其中一些應該是動態的,我會建議做什麼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 
+0

奇怪的主意,有單獨的配置文件只是一個物業服務,'Config.groovy'應使用該屬性。 – tig 2013-02-11 01:40:54

+2

@tig AFAIK,當插件被打包時省略'Config.groovy',而不是測試插件而不是配置它,不是? – peterp 2013-07-01 15:36:37

13

您可能想要保持簡單(tm)。您可以直接在Config.groovy中定義URL(包括每個環境設置),並根據需要使用grailsApplication.config(大多數情況下)或ConfigurationHolder.config對象(請參閱details in the manual)從插件中訪問它。

作爲額外的好處,該設置也可以在標準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 
    } 
} 

後,在你的插件提供的

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