ドメインオブジェクトまたは静的スコープからConfig.groovy情報にアクセスするにはどうすればよいですか?現在ConfigurationHolder.config。*を使用していますが、これとApplicationHolderは非推奨になっているため、「正しく実行」したいと思います...しかし、grailsApplicationオブジェクトはDO/静的スコープでは使用できません。
4 に答える
ApplicationHolder
非推奨のConfigurationHolder
、などのGrails 2の代替品は、です。grails.util.Holders
これは同じ機能を提供しますが、同じコンテナ内の複数の異なるWebアプリケーションが親クラスローダー内のGrails JARの単一コピーを共有している場合に安全です(これは古いホルダーが故障した場合)。
import grails.util.Holders
// ...
static void foo() {
def configOption = Holders.config.myapp.option
}
ドメインクラスのメタクラスにを追加しgrailsApplication
ます。これは、2.0ファイナルで行うことを考えていることです。今のところ、それを入れてくださいBootStrap.groovy
、例えば
class BootStrap {
def grailsApplication
def init = { servletContext ->
for (dc in grailsApplication.domainClasses) {
dc.clazz.metaClass.getGrailsApplication = { -> grailsApplication }
dc.clazz.metaClass.static.getGrailsApplication = { -> grailsApplication }
}
}
}
次に、から構成にアクセスし、またはgrailsApplication.config
を介してSpringBeanにアクセスできます。grailsApplication.mainContext.getBean('foo')
grailsApplication.mainContext.foo
私は本当に静的ユーティリティでのみconfigにアクセスしたかったのです。SOに関するほとんどの回答を検索して読んだ後、私は簡単な解決策を思いつきました(誰かに役立つかもしれません):
src/groovyの下にホルダークラスを追加します。
class StaticContext {
static def app;
}
ブートストラップ初期化で初期化します
class BootStrap {
def grailsApplication
def init = { servletContext ->
StaticContext.app = grailsApplication
}
def destroy = {
}
}
そして静的ユーティリティでそれにアクセスします:
//In my case Solr URL in single ton
def solrUrl = StaticContext.app.config.solr.url
Grails 2.2.5では、これが機能することがわかりました。
grails-app/conf/Config.groovy
ご使用の環境に適したセクションので、変数を構成します。例えば:environments { ... development { ... grails.config.myUrl = "http://localhost:3000" ...
..。
アクセスするために:
import grails.util.Holders class myClass { ... def static myStaticMethod() { def myVar = Holders.config.grails.config.myUrl ...