簡體   English   中英

在域對象和靜態范圍中獲取grails 2.0.0M1配置信息?

[英]getting grails 2.0.0M1 config info in domain object, and static scope?

如何從域對象或靜態范圍獲取Config.groovy信息? 我現在正在使用ConfigurationHolder.config。*,但是這個和ApplicationHolder已被棄用,所以我想'做對'...但是grailsApplication對象在DO /靜態范圍內不可用。

不推薦使用的ApplicationHolderConfigurationHolder等的Grails 2替代品是grails.util.Holders ,它提供相同的功能,但是當同一容器中的多個不同的grails.util.Holders共享一個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.mainContext.getBean('foo')grailsApplication.mainContext.foo訪問grailsApplication.config的配置和Spring bean。

我真的只想在靜態實用程序中訪問配置。 在SO上搜索和閱讀大部分答案后,我得到了簡單的解決方案(可能對某些人有用):

在src / groovy下添加holder類:

class StaticContext {
    static def app;
}

在bootstrap init中初始化它

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中我發現這可行:

  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 ... 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM