如何从域对象或静态范围获取Config.groovy信息?我现在正在使用ConfigurationHolder.config。*,但不推荐使用这个和ApplicationHolder,因此我希望“正确行事”#39; ...但是在DO /静态范围内,grailsApplication对象不可用。
答案 0 :(得分:19)
已弃用的ApplicationHolder
,ConfigurationHolder
等的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.config
或grailsApplication.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中,我发现这可行:
在适用于您的环境的部分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
...