首先,
让我开始,我已经看了很多网站关于在Grails上配置多个数据源的“正确”方法,其中每一个(使用Grails 2.0及更高版本)指向
docs ,但是在
做了文档说我得到的之后这个错误:
@H_
874_1@Error 2014-03-29 15
:48:29,219 [localhost-startStop-1] ERROR co
ntext.GrailsCo
ntextLoader - Error initializing the application: Error crea
Ting bean with name '
transactionManager_lookup': C
Annot resolve reference to bean 'sessionFactory_lookup' while set
Ting bean property 'sessionFactory';
nested exception is org.springframework
.bean
s.factory
.beanCreationException: Error crea
Ting bean with name 'sessionFactory_lookup': C
Annot resolve reference to bean '
transactionManager' while set
Ting bean property '
transactionManager';
nested exception is org.springframework
.bean
s.factory
.beanCreationException: Error crea
Ting bean with name '
transactionManager': C
Annot resolve reference to bean '$pri
MarytransactionManager' while set
Ting constructor argument;
nested exception is org.springframework
.bean
s.factory
.beanCreationException: Error crea
Ting bean with name '$pri
MarytransactionManager': C
Annot resolve reference to bean 'sessionFactory' while set
Ting bean property 'sessionFactory';
nested exception is org.springframework
.bean
s.factory
.beanCreationException: Error crea
Ting bean with name 'sessionFactory': C
Annot resolve reference to bean '
transactionManager' while set
Ting bean property '
transactionManager';
nested exception is org.springframework
.bean
s.factory
.beanCurrentlyInCreationException: Error crea
Ting bean with name '
transactionManager': @R_
874_10613@ested bean is currently in creation: Is there an unresolvable circular reference?
message: Error crea
Ting bean with name '
transactionManager_lookup': C
Annot resolve reference to bean 'sessionFactory_lookup' while set
Ting bean property 'sessionFactory';
nested exception is org.springframework
.bean
s.factory
.beanCreationException: Error crea
Ting bean with name 'sessionFactory_lookup': C
Annot resolve reference to bean '
transactionManager' while set
Ting bean property '
transactionManager';
nested exception is org.springframework
.bean
s.factory
.beanCreationException: Error crea
Ting bean with name '
transactionManager': C
Annot resolve reference to bean '$pri
MarytransactionManager' while set
Ting constructor argument;
nested exception is org.springframework
.bean
s.factory
.beanCreationException: Error crea
Ting bean with name '$pri
MarytransactionManager': C
Annot resolve reference to bean 'sessionFactory' while set
Ting bean property 'sessionFactory';
nested exception is org.springframework
.bean
s.factory
.beanCreationException: Error crea
Ting bean with name 'sessionFactory': C
Annot resolve reference to bean '
transactionManager' while set
Ting bean property '
transactionManager';
nested exception is org.springframework
.bean
s.factory
.beanCurrentlyInCreationException: Error crea
Ting bean with name '
transactionManager': @R_
874_10613@ested bean is currently in creation: Is there an unresolvable circular reference?
我觉得最有趣的是,如果我指定:
@H_
874_1@data@R_
696_9016@e_lookup
我会得到:
@H_
874_1@Error initializing the application: Error crea
Ting bean with name '
transactionManager_lookup'
如果我将其更改为:
@H_
874_1@data@R_
696_9016@e_MysqLdb
我明白了:
@H_
874_1@Error initializing the application: Error crea
Ting bean with name '
transactionManager_MysqLdb'
如果我没有指定第二个数据源,一切正常.
我的代码:
@H_
874_1@data@R_
696_9016@e
{
logsql = true
pooled = true
dialect = org.hibernate.dialect.MysqLInnoDBDialect
driverClassname = 'co
m.Mysq
l.jdbc.Driver'
username = 'myuser'
password = 'mypass'
url = 'jdbc:MysqL://localhost/mydatabase'
dbCreate = '
update'
}
data@R_
696_9016@e_MysqL
{
dialect = org.hibernate.dialect.MysqLInnoDBDialect
driverClassname = 'co
m.Mysq
l.jdbc.Driver'
username = 'myuser'
password = 'mypass'
url = 'jdbc:MysqL://localhost/mydatabase'
dbCreate = '
update'
}
data@R_
696_9016@e_
Oracle
{
dialect = org.hibernate.dialect.
Oracle10gDialect
driverClassname = '
Oracle.jdbc.driver.
OracleDriver'
username = 'myuser'
password = 'mypass'
url = 'jdbc:
Oracle:thin:@localhost
:1521:mydatabase'
dbCreate = '
update'
}
我在这做错了什么? (如前所述,如果我消除了两个辅助data@R_696_9016@es(data@R_696_9016@e_MysqL和data@R_696_9016@e_OraclE),一切正常).
提前致谢.
Dev:Ubuntu – Grails 2.3.7 – MysqL – Oracle 11g.
好的,我想出来了.
在Grails 2.3.7发行说明中,它说要升级你的hibernate版本.我做不到.
http://grails.org/2.3.7+Release+Notes
runtime’:hibernate:3.6.10.10′
然后,在我这样做后,我停止了这个错误并得到了另一个错误
java.lang.classnotFoundException:null
在java.net.urlclassloader $1.run(urlclassloader.java:366)
在java.net.urlclassloader $1.run(urlclassloader.java:355)
在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)
在DbmGenerateGormChangelog $_… doCall(DbmGenerateGormChangelog:52)
at …. MigrationUtils.executeInSession(MigrationUtils.groovy:132)
在DbmGenerateGormChangelog $_run_closure2.doCall(DbmGenerateGormChangelog:51)
在DbmGenerateGormChangelog $_run_closure1.doCall(DbmGenerateGormChangelog:33)
我以前从未必须为Oracle指定hibernate方言,但显然在最新版本的迁移插件(当前为1.3.8)中,你必须这样做.
@H_
874_1@dialect = "org.hibernate.dialect.
Oracle10gDialect"
我已经指定了MysqL的方言,所以我不知道如果删除它是否会产生相同的错误.