![](/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.