首先,让我开始浏览关于在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。
如果默认'dataSource'指向MySql中的同一个数据库,为什么你需要'dataSource_mysql'?正如我第一眼看到的那样,两个dataSources bean试图通过容器指向具有相同凭据的相同数据库来创建,因此是循环引用错误。删除'dataSource_mysql',只使用数据源(默认)和'dataSource_oracle'。 – dmahapatro
在grails 2.3.6和grails 2.3.7中遇到类似的问题,但是在grails中很好用2.3.5 – user1690588
感谢dmahapatro对你的推荐,对它的代码进行了优化,但是,我仍然得到相同的错误,而且如果我将oracle块更改为一个mysql(这是一个dataSource(默认值)和一个dataSource_mysql,但具有不同的数据库和不同的服务器)我得到相同的错误,所以不是mysql-oracle问题。任何其他想法?有人在Grails 2.3.7上工作吗? –