我是普通的Grails框架的新手。我们有一个要求,我们需要在运行时建立数据库连接,因为每个应用程序用户都有用于获取数据库连接的唯一凭据。我们发现可以利用Spring提供的API UserCredentialsDataSourceAdapter来实现我们的目标。但是,当我们在添加UserCredentialsDataSourceAdapter的配置后尝试运行该应用程序时,会出现以下错误

[main]错误context.GrailsContextLoader-执行 bootstrap 时出错:创建名称为'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:无法在空对象上获取属性“config”
org.springframework.beans.factory.BeanCreationException:创建名称为'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:无法在空对象上获取属性“config”
在org.grails.tomcat.TomcatServer.start(TomcatServer.groovy:212)
在grails.web.container.EmbeddableServer $ start.call(未知来源)
在_GrailsRun_groovy $ _run_closure5_closure12.doCall(_GrailsRun_groovy:158)
在_GrailsRun_groovy $ _run_closure5_closure12.doCall(_GrailsRun_groovy)
在_GrailsS​​ettings_groovy $ _run_closure10.doCall(_GrailsS​​ettings_groovy:280)
在_GrailsS​​ettings_groovy $ _run_closure10.call(_GrailsS​​ettings_groovy)
在_GrailsRun_groovy $ _run_closure5.doCall(_GrailsRun_groovy:149)
在_GrailsRun_groovy $ _run_closure5.call(_GrailsRun_groovy)
在_GrailsRun_groovy.runInline(_GrailsRun_groovy:116)
在_GrailsRun_groovy.this $ 4 $ runInline(_GrailsRun_groovy)
在_GrailsRun_groovy $ _run_closure1.doCall(_GrailsRun_groovy:59)
在RunApp $ _run_closure1.doCall(RunApp:33)
在gant.Gant $ _dispatch_closure5.doCall(Gant.groovy:381)
在gant.Gant $ _dispatch_closure7.doCall(Gant.groovy:415)
在gant.Gant $ _dispatch_closure7.doCall(Gant.groovy)
在gant.Gant.withBuildListeners(Gant.groovy:427)
在gant.Gant.this $ 2 $ withBuildListeners(Gant.groovy)
at gant.Gant $ this $ 2 $ withBuildListeners.callCurrent(未知来源)
在gant.Gant.dispatch(Gant.groovy:415)
在gant.Gant.this $ 2 $ dispatch(Gant.groovy)
在gant.Gant.invokeMethod(Gant.groovy)
在gant.Gant.executeTargets(Gant.groovy:590)
在gant.Gant.executeTargets(Gant.groovy:589)
由以下原因引起:org.springframework.beans.factory.BeanCreationException:创建名称为'transactionManager'的bean时出错:设置bean属性'sessionFactory'时无法解析对bean'sessionFactory'的引用;嵌套的异常是org.springframework.beans.factory.BeanCreationException:创建名称为'sessionFactory'的bean时出错:调用init方法失败;嵌套异常为java.lang.NullPointerException:无法在空对象上获取属性“config”
...另外23个
由以下原因引起:org.springframework.beans.factory.BeanCreationException:创建名称为'sessionFactory'的bean时出错:调用init方法失败;嵌套异常为java.lang.NullPointerException:无法在空对象上获取属性“config”
...另外23个
原因:java.lang.NullPointerException:无法在空对象上获取属性“config”
在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" ]
            }

}

最佳答案

我不是很了解这个问题,它是什么应用程序用户,为什么没有多个应用程序,每个用户只有一个用户(数据库用户)...。

Grails确实需要数据源才能启动...

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

10-08 15:56