簡體   English   中英

在應用程序上下文加載之前執行了datasource.groovy?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM