我是普通的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)
在_GrailsSettings_groovy $ _run_closure10.doCall(_GrailsSettings_groovy:280)
在_GrailsSettings_groovy $ _run_closure10.call(_GrailsSettings_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