如何從域對象或靜態範圍獲取Config.groovy信息?我現在使用ConfigurationHolder.config。*,但是這個和ApplicationHolder已經被棄用了,所以我想'做對了'...但是grailsApplication對象在DO /靜態作用域中不可用。在域對象和靜態作用域中獲取Grails 2.0.0M1配置信息?
6
A
回答
8
我會將grailsApplication
添加到域類的元類 - 這是我正在考慮爲2.0 final做的事情。現在,把它放在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豆。
1
我真的只想在靜態工具中訪問配置。搜索和閱讀最上SO的答案後,我帶着簡單的解決方案(可能對別人有用):在src
添加holder類/常規:
class StaticContext {
static def app;
}
在引導初始化初始化
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
19
Grails的2 repla已過時的ApplicationHolder
,ConfigurationHolder
等的水泥是grails.util.Holders
,它提供了相同的功能,但是在同一個容器中的幾個不同的webapps在父類加載器中共享單個Grails JAR副本時,這種方式是安全的(這是舊持有人破產的情況)。
import grails.util.Holders
// ...
static void foo() {
def configOption = Holders.config.myapp.option
}
1
在Grails的2.2.5,我發現這會工作:
配置您的變量
grails-app/conf/Config.groovy
,在部分appropiate您的環境。例如:environments { ... development { ... grails.config.myUrl = "http://localhost:3000" ...
...
要訪問:
import grails.util.Holders class myClass { ... def static myStaticMethod() { def myVar = Holders.config.grails.config.myUrl ...
相關問題
- 1. Grails獲取子域對象
- 2. 從Shiro Subject獲取到grails域對象
- 3. Grails 2.0.0M1和WebFlow
- 4. grails 3 - 獲取子域對象
- 5. 在域對象約束中使用grails配置值
- 6. 獲取map從GrailsDomainClass獲取靜態域字段值grails
- 7. Python - 獲取靜態信息
- 8. Grails在域模型中引用對象
- 9. 虛擬主機對於通配符子域和靜態子域
- 10. 動態作用域和靜態範圍
- 11. 靜態和動態作用域
- 12. angularjs從作用域對象獲取值
- 13. 如何在Grails中模擬一個域對象的靜態方法?
- 14. grails動態訪問域對象
- 15. 跨域Ajax調用獲取靜態Html?
- 16. 獲取對象的區域
- 17. Java靜態作用域
- 18. 函數作用域靜態非窗格對象初始化
- 19. 在Grails 2.0中爲域對象使用分配的ID
- 20. 如何在Grails中複製域對象?
- 21. 在Grails中創建多個域對象
- 22. Grails - 訪問編解碼器類中的靜態配置對象
- 23. Grails丟棄域對象
- 24. 在Grails中獲取用戶創建的域類的域名
- 25. 靜態Cookieless域名
- 26. 如何獲取Grails域對象中的聲明屬性?
- 27. 如何加載靜態配置信息
- 28. 在Grails域中獲取屬性標籤
- 29. 獲取Magento配置信息
- 30. 獲取ec2配置信息
好主意......但是,啓動失敗,並「產生的原因:org.hibernate.InstantiationException:無法實例化測試objectqdcore.UserCallFlow「(qdcore.UserCallFlow是一個域類),因爲看起來Hibernate在Bootstrap運行之前做了一些事情。爲了解決這個問題,我使用安全的deref(例如,grailsApplication?.config?.qdcore?.servers?.upload?.url),以便Hibernate很開心,Bootstrap可以運行,然後grailsApplication可用。謝謝! – Wayne
但是,即使安全的deref在DO(def grailsApplication; def config = grailsApplication?.config; def String usrv = config?.qdcore?.servers?.upload?.url)我得到空值, m沒有正確使用它,當然 - 當我將自己整理出來時,我會回來;) – Wayne
在DO中起作用的是爲grailsApplication使用靜態作用域,其餘的實例作用域;例如,類UCF {static grailsApplication; def config = grailsApplication?.config; def String usrv = config?.qdcore?.servers?.upload?.url ...}我不能爲其他人使用靜態作用域,因爲當我嘗試獲取其配置屬性時,我會遇到「grailsApplication」爲空的異常。這可能有點瑣碎,但它適用於這個原型應用程序! – Wayne