質問
初めての Grails プラグインを開発しています。Webサービスにアクセスする必要があります。プラグインには明らかに Web サービスの URL が必要です。Groovy クラスにハードコーディングせずにこれを構成する最善の方法は何ですか?環境ごとに異なる構成を使用すると便利です。
解決
コンフィグオプション、それだけでプロパティファイルに読まする方が簡単かもしれません。そこの設定オプションのいくつかの数があり、そのうちのいくつかは、動的であるべきならば、私はAcegiのセキュリティー・プラグインが何をやって示唆している - おそらく/grails-app/conf/plugin_name_config.groovyするファイルを追加します。
追加ボーナスは、ユーザーが簡単に異なる環境を行うことができることに加えて、(プロパティファイルを使用するよりはるかに良い)その構成オプションを計算するためにグルーヴィーなコードを実行することができるということです。
内部で使用することをGrailsの何である、 http://groovy.codehaus.org/ConfigSlurper にチェックしてください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
他のヒント
Keep It Simple(tm) を選択するとよいでしょう。URL は Config.groovy で環境ごとの設定を含めて直接定義し、必要に応じて 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
}
}
後で、プラグインによって提供されるサービスで
import org.codehaus.groovy.grails.commons.ConfigurationHolder
class MyPluginService {
def url = ConfigurationHolder.config.myPlugin.url
// ...
}