2014-03-29 35 views
6

首先,让我开始浏览关于在Grails上配置多个数据源的“正确”方式的许多站点,每个站点(使用Grails 2.0和更高版本)都指向 docs,但是之后做什么的文档说,我得到这个错误:Grails - 多个数据源

Error 2014-03-29 15:48:29,219 [localhost-startStop-1] ERROR context.GrailsContextLoader  - Error initializing the application: Error creating bean with name 'transactionManager_lookup': Cannot resolve reference to bean 'sessionFactory_lookup' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory_lookup': Cannot resolve reference to bean 'transactionManager' while setting bean property 'transactionManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean '$primaryTransactionManager' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '$primaryTransactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Cannot resolve reference to bean 'transactionManager' while setting bean property 'transactionManager'; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'transactionManager': Requested bean is currently in creation: Is there an unresolvable circular reference? 
Message: Error creating bean with name 'transactionManager_lookup': Cannot resolve reference to bean 'sessionFactory_lookup' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory_lookup': Cannot resolve reference to bean 'transactionManager' while setting bean property 'transactionManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean '$primaryTransactionManager' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '$primaryTransactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Cannot resolve reference to bean 'transactionManager' while setting bean property 'transactionManager'; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'transactionManager': Requested bean is currently in creation: Is there an unresolvable circular reference? 

我觉得最有趣的是什么,如果我指定:

dataSource_lookup 

我会得到:

Error initializing the application: Error creating bean with name  'transactionManager_lookup' 

如果我将其更改为:

dataSource_mysqldb 

我得到:

Error initializing the application: Error creating bean with name 'transactionManager_mysqldb' 

如果我不指定数据源第二,一切工作就好了。

我的代码:

dataSource { 
logSql = true 
pooled = true 
dialect = org.hibernate.dialect.MySQLInnoDBDialect 
driverClassName = 'com.mysql.jdbc.Driver' 
username = 'myuser' 
password = 'mypass' 
url = 'jdbc:mysql://localhost/mydatabase' 
dbCreate = 'update' 
} 

dataSource_mysql { 
dialect = org.hibernate.dialect.MySQLInnoDBDialect 
driverClassName = 'com.mysql.jdbc.Driver' 
username = 'myuser' 
password = 'mypass' 
url = 'jdbc:mysql://localhost/mydatabase' 
dbCreate = 'update' 
} 

dataSource_oracle { 
dialect = org.hibernate.dialect.Oracle10gDialect 
driverClassName = 'oracle.jdbc.driver.OracleDriver' 
username = 'myuser' 
password = 'mypass' 
url = 'jdbc:oracle:thin:@localhost:1521:mydatabase' 
dbCreate = 'update' 
} 

我在做什么错在这里? (如前所述,如果我消除了两个辅助数据源(dataSource_mysql和dataSource_oracle),一切正常)。

在此先感谢。 开发:Ubuntu - Grails 2.3.7 - MySQL - Oracle 11g。

+1

如果默认'dataSource'指向MySql中的同一个数据库,为什么你需要'dataSource_mysql'?正如我第一眼看到的那样,两个dataSources bean试图通过容器指向具有相同凭据的相同数据库来创建,因此是循环引用错误。删除'dataSource_mysql',只使用数据源(默认)和'dataSource_oracle'。 – dmahapatro

+0

在grails 2.3.6和grails 2.3.7中遇到类似的问题,但是在grails中很好用2.3.5 – user1690588

+1

感谢dmahapatro对你的推荐,对它的代码进行了优化,但是,我仍然得到相同的错误,而且如果我将oracle块更改为一个mysql(这是一个dataSource(默认值)和一个dataSource_mysql,但具有不同的数据库和不同的服务器)我得到相同的错误,所以不是mysql-oracle问题。任何其他想法?有人在Grails 2.3.7上工作吗? –

回答

4

好吧,我明白了这一点。

在Grails 2.3.7发行说明中,它说升级你的休眠版本。我没有这样做。

http://grails.org/2.3.7+Release+Notes

runtime ':hibernate:3.6.10.10'

再经过我这样做,我停下来收到这个错误,并得到了另一个错误

java.lang.ClassNotFoundException: null at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at ....MigrationUtils.createInstance(MigrationUtils.groovy:220) at ....MigrationUtils.getDatabase(MigrationUtils.groovy:57) at ....MigrationUtils.getDatabase(MigrationUtils.groovy:116) at DbmGenerateGormChangelog$_...doCall(DbmGenerateGormChangelog:52) at ....MigrationUtils.executeInSession(MigrationUtils.groovy:132) at DbmGenerateGormChangelog$_run_closure2.doCall(DbmGenerateGormChangelog:51) at DbmGenerateGormChangelog$_run_closure1.doCall(DbmGenerateGormChangelog:33)

我以前从来没有到指定的Oracle休眠方言,但显然在最新版本的migrations插件(1.3.8当前版本)中,您必须。

dialect = "org.hibernate.dialect.Oracle10gDialect" 

我已经指定MySQL的方言,所以我不知道如果去掉它会产生同样的错误。

+0

尽管我没有时间来确认这一点,但我已经阅读了文档,并且看起来像使用hibernate升级它可能会起作用。期待证实这一点。 –