[英]getting grails 2.0.0M1 config info in domain object, and static scope?
如何從域對象或靜態范圍獲取Config.groovy信息? 我現在正在使用ConfigurationHolder.config。*,但是這個和ApplicationHolder已被棄用,所以我想'做對'...但是grailsApplication對象在DO /靜態范圍內不可用。
不推薦使用的ApplicationHolder
, ConfigurationHolder
等的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中我發現這可行:
在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 ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.