6

ドメインオブジェクトまたは静的スコープからConfig.groovy情報にアクセスするにはどうすればよいですか?現在ConfigurationHolder.config。*を使用していますが、これとApplicationHolderは非推奨になっているため、「正しく実行」したいと思います...しかし、grailsApplicationオブジェクトはDO/静的スコープでは使用できません。

4

4 に答える 4

19

ApplicationHolder非推奨のConfigurationHolder、などのGrails 2の代替品は、です。grails.util.Holdersこれは同じ機能を提供しますが、同じコンテナ内の複数の異なるWebアプリケーションが親クラスローダー内のGrails JARの単一コピーを共有している場合に安全です(これは古いホルダーが故障した場合)。

import grails.util.Holders

// ...

static void foo() {
  def configOption = Holders.config.myapp.option
}
于 2013-05-28T10:34:11.953 に答える
8

ドメインクラスのメタクラスにを追加し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

于 2011-08-08T06:32:57.220 に答える
1

私は本当に静的ユーティリティでのみ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
于 2013-05-28T10:10:36.403 に答える
1

Grails 2.2.5では、これが機能することがわかりました。

  1. grails-app/conf/Config.groovyご使用の環境に適したセクションので、変数を構成します。例えば:

    environments {
    ...
      development {
      ...
        grails.config.myUrl = "http://localhost:3000"
        ...
    

    ..。

  2. アクセスするために:

    import grails.util.Holders
    
    class myClass {
    ...
    
       def static myStaticMethod() {
          def myVar = Holders.config.grails.config.myUrl
    ...
    
于 2014-09-10T19:00:49.233 に答える