Datasource.groovy在应用程序上下文加载之前执行了吗?

时间:2014-12-01 00:03:42

标签: spring grails grails-plugin

我正在尝试实现编解码器来解密Oracle数据连接的密码。编解码器将在不同的位置使用,我认为为它创建一个插件可能是个好主意。我的想法是创建一个能够识别Spring上下文的编解码器,并且可以从 Config.groovy 中获取它的词组。我编写了Codec编码,它在应用程序启动时连接 - 但是当应用程序启动时,我的SpringContext.getApplicationContext()似乎返回null。我假设这是因为应用程序上下文尚未初始化 - 但我的研究并没有告诉我有关加载顺序的信息。

如果是这样的话,怎么会在配置中外化这样的东西呢?我知道访问 DataSource 信息的唯一方法是通过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容器将是应用程序启动时首先运行的东西 - 我错了吗?当数据源在启动时设置时,是否还有其他原因导致应用程序上下文为空?

1 个答案:

答案 0 :(得分:2)

  

我认为Spring容器将是第一件事   应用程序启动时运行 - 我错了吗?

是的,你是。

在初始化Spring容器之前,必须对配置文件进行评估,因为这些配置文件定义了影响Spring容器初始化的元素。