1

我是 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" ]
            }

}

4

1 回答 1

0

我真的不明白这个问题,它是一个应用程序用户,为什么没有多个应用程序,每个应用程序只有一个用户(数据库用户)......

Grails 确实需要一个 DataSource 来启动...

或者应用程序用户是正在登录应用程序的人(多租户) http://www.grails.org/plugin/multi-tenant

于 2011-10-25T08:16:02.950 回答