繁体   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