在域对象和静态范围中获取grails 2.0.0M1配置信息?

时间:2011-08-08 01:23:17

标签: grails grails-domain-class

如何从域对象或静态范围获取Config.groovy信息?我现在正在使用ConfigurationHolder.config。*,但不推荐使用这个和ApplicationHolder,因此我希望“正确行事”#39; ...但是在DO /静态范围内,grailsApplication对象不可用。

4 个答案:

答案 0 :(得分:19)

已弃用的ApplicationHolderConfigurationHolder等的Grails 2替换为grails.util.Holders,它提供了相同的功能,但在同一个不同的webapps中是安全的容器在父类加载器中共享Grails JAR的单个副本(这是旧持有者崩溃的情况)。

import grails.util.Holders

// ...

static void foo() {
  def configOption = Holders.config.myapp.option
}

答案 1 :(得分: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.configgrailsApplication.mainContext.getBean('foo')grailsApplication.mainContext.foo和Spring bean访问配置。

答案 2 :(得分:1)

我真的只想在静态实用程序中访问配置。在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

答案 3 :(得分: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
    ...