![](/img/trans.png)
[英]multiple times triggering of Datasource.groovy in grails application ( throwing exception when called second time)
[英]Datasource.groovy executed prior to application context loading?
我正在嘗試實現一個編解碼器來解密Oracle數據連接的密碼。 編解碼器將在各個位置使用,我認為為它創建一個插件可能是一個好主意。 我的想法是創建一個知道Spring上下文的編解碼器,並可以從Config.groovy中提取其鹽語。 我已經對Codec進行了編碼,並且它在應用程序啟動時正在連接-但似乎我的SpringContext.getApplicationContext()
在應用程序啟動時返回null。 我以為這是因為尚未初始化應用程序上下文-但是我的研究還沒有告訴我很多有關加載順序的信息。
如果是這樣的話,該如何在配置中外部化這樣的東西呢? 我知道訪問數據源信息的唯一方法是通過grailsApplication
引用(再次依賴於Spring)之類的項。
稍微經過清理的代碼段:
static Codec getCodec(){
if( !SpringContext.getApplicationContext() ){
println "Context Is Null"
}
def config = SpringContext?.getApplicationContext()?.
getBean("grailsApplication")?.config?.crypto
String saltValue = config?.salt
...
這樣就設置了Datasource.groovy:
datasource {
...some stuff
passwordEncryptionCodec = 'com.someguy.mycode.StaticCodec'
在StaticCodec內部,我基本上有編碼/解碼方法,它們在第一個代碼示例中調用了工廠方法,它們執行沒有問題-執行run-app后,我在啟動日志中收到了“ Context Is Null”語句。
SpringContext是我在插件的doWithSpring
部分中創建的bean,似乎在此啟動問題之外也可以正常工作(在請求時訪問編解碼器效果很好)。
我以為在啟動應用程序時,Spring容器將是啟動並運行的第一件事-我在這方面做錯了嗎? 在啟動數據源時,為什么應用程序上下文為空還有其他原因嗎?
我以為在啟動應用程序時,Spring容器將是啟動並運行的第一件事-我在這方面做錯了嗎?
是的,你是。
在初始化Spring容器之前,必須對一些配置文件進行評估,因為這些配置文件定義了會影響Spring容器初始化的元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.