我是 groovy Grails 框架的新手。我们有一个要求,我们需要在运行时建立数据库连接,因为每个应用程序用户都有唯一的凭据来获取数据库连接。我们发现我们可以利用 Spring 提供的 API UserCredentialsDataSourceAdapter 来实现我们的目标。但是当我们在添加 UserCredentialsDataSourceAdapter 的配置后尝试运行应用程序时,我们收到以下错误
[main] 错误 context.GrailsContextLoader - 执行引导程序时出错:创建名称为“messageSource”的 bean 时出错:bean 初始化失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“transactionManager”的 bean 时出错:设置 bean 属性“sessionFactory”时无法解析对 bean“sessionFactory”的引用;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“sessionFactory”的 bean 时出错:调用 init 方法失败;嵌套异常是 java.lang.NullPointerException:无法在空对象 org.springframework.beans.factory.BeanCreationException 上获取属性“config”:创建名为“messageSource”的 bean 时出错:bean 初始化失败;嵌套异常是 org. springframework.beans.factory.BeanCreationException:创建名为“transactionManager”的bean时出错:设置bean属性“sessionFactory”时无法解析对bean“sessionFactory”的引用;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“sessionFactory”的 bean 时出错:调用 init 方法失败;嵌套异常是 java.lang.NullPointerException: Cannot get property 'config' on null object at org.grails.tomcat.TomcatServer.start(TomcatServer.groovy:212) at grails.web.container.EmbeddableServer$start.call(Unknown Source ) 在 _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy:158) 在 _GrailsRun_groovy$_run_closure5_closure12。Gant$_dispatch_closure7.doCall(Gant.groovy) 在 gant.Gant.withBuildListeners(Gant.groovy:427) 在 gant.Gant.this$2$withBuildListeners(Gant.groovy) 在 gant.Gant$this$2$withBuildListeners.callCurrent(Unknown来源)在 gant.Gant.dispatch(Gant.groovy:415) 在 gant.Gant.this$2$dispatch(Gant.groovy) 在 gant.Gant.invokeMethod(Gant.groovy) 在 gant.Gant.executeTargets(Gant.groovy :590) at gant.Gant.executeTargets(Gant.groovy:589) 原因:org.springframework.beans.factory.BeanCreationException:创建名为“transactionManager”的bean时出错:设置bean属性时无法解析对bean“sessionFactory”的引用'会话工厂'; 嵌套异常是 org. springframework.beans.factory.BeanCreationException:创建名为“sessionFactory”的bean时出错:调用init方法失败;嵌套异常是 java.lang.NullPointerException: Cannot get property 'config' on null object ... 23 更多原因:org.springframework.beans.factory.BeanCreationException: 错误创建名为 'sessionFactory' 的 bean:调用 init 方法失败; 嵌套异常是 java.lang.NullPointerException: Cannot get property 'config' on null object ... 23 更多 还有23个原因:org.springframework.beans.factory.BeanCreationException:创建名为“sessionFactory”的bean时出错:调用init方法失败;嵌套异常是 java.lang.NullPointerException: Cannot get property 'config' on null object ... 23 更多 还有23个原因:org.springframework.beans.factory.BeanCreationException:创建名为“sessionFactory”的bean时出错:调用init方法失败;嵌套异常是 java.lang.NullPointerException: Cannot get property 'config' on null object ... 23 更多 原因:java.lang.NullPointerException:无法 在 Script1.run(Script1.groovy:1) 处获取空对象上的属性“配置”... 23 更多
我们在 resources.groovy 中配置了 UserCredentialsDataSourceAdapter 如下
beans = {
targetDataSource(DriverManagerDataSource){
driverClassName= "oracle.jdbc.driver.OracleDriver"
url= "jdbc:oracle:oci:@dbname"
}
dataSource(UserCredentialsDataSourceAdapter){
targetDataSource= ref("targetDataSource")
username = "username"
password = "password"
}
sessionFactory(ConfigurableLocalSessionFactoryBean) {
dataSource = dataSource
hibernateProperties = [ "hibernate.hbm2ddl.auto":"create-drop",
"hibernate.show_sql":true ,
"hibernate.dialect":"org.hibernate.dialect.O racle10gDialect" ]
}
}