如何在运行时获取我的Grails Config.groovy中的好东西?

dan*_*anb 36 configuration grails runtime

在Config.groovy中我看到了这个:

// set per-environment serverURL stem for creating absolute links
environments {
    production {
        grails.serverURL = "http://www.changeme.com"
    }
}
Run Code Online (Sandbox Code Playgroud)

在运行时访问它的正确方法是什么?

khy*_*ylo 74

在最新版本的Grails中,不推荐使用ConfigurationHolder.

相反,您应该使用grailsApplication对象.

grailsApplication.config.grails.serverURL
Run Code Online (Sandbox Code Playgroud)

如果在Controller或Service中,则使用grailsApplication对象的依赖注入.例如

class MyController{
    def grailsApplication
    def myAction() {
        grailsApplication.config.grails.serverURL
    }
Run Code Online (Sandbox Code Playgroud)

请参阅如何在Grails 2.0中访问Grails配置?

  • @khylo是不是还有使用`grails.util.Holders`对象的可能性,该对象是自Grails 2.0以来实现的,并使用`Holders.config`来获取对`Config.groovy`文件的读访问权? (2认同)

Rob*_*her 31

丹布走在正确的轨道上.但是,如果您进行更好的导入,生活会变得更容易:

import org.codehaus.groovy.grails.commons.ConfigurationHolder as CH
println CH.config.grails.serverURL
Run Code Online (Sandbox Code Playgroud)

  • 在Grails 2.0及更高版本中,不推荐使用ConfigurationHolder(和其他Holders).相反,你应该使用依赖注入.请参阅下面的答案 (12认同)

dan*_*anb 14

这里是:

import org.codehaus.groovy.grails.commons.ConfigurationHolder
println ConfigurationHolder.config.grails.serverURL
Run Code Online (Sandbox Code Playgroud)

或者,在控制器和标签中,显然这将起作用:

grailsApplication.config.grails.serverURL
Run Code Online (Sandbox Code Playgroud)

我在BootStrap中需要它,所以选项1是我需要的.


jst*_*ker 10

正如一些评论中所提到的,另一个选项是grails.utils.Holders在Grails 2.0中添加的类.我更喜欢这种方法,因为您可以在未配置依赖注入的类中使用它.

import grails.util.Holders

class Foo {
    def bar() {
        println(Holders.config.grails.serverURL)
    }
}
Run Code Online (Sandbox Code Playgroud)