【发布时间】:2016-01-23 02:23:31
【问题描述】:
我最近尝试创建一个应用程序,允许我比较 3 个独立数据库的值。数据库是 3 个 Oracle 实例,它们(本质上)包含相同的数据库,但在 DEV/TEST/PROD 设置中。
我想做的是在 GRAILS 3 中创建一个域类。然后我希望能够获取该域类映射到的记录,但对所有 3 个环境都执行此操作。
从阅读 Grails 3 文档看来,这应该可以通过在 application.yml 中定义 3 个数据源来实现(在我的示例中,我在这里定义了 4 个):
dataSources:
dataSource:
pooled: true
jmxExport: true
logSql: true
driverClassName: oracle.jdbc.OracleDriver
username: MYUSER
password: Password1
dbCreate: validate
url: jdbc:oracle:thin:@someserver:1521:DEV1
dataSource1:
pooled: true
jmxExport: true
logSql: true
driverClassName: oracle.jdbc.OracleDriver
username: MYUSER
password: Password1
dbCreate: validate
url: jdbc:oracle:thin:@someserver:1521:DEV1
dataSource2:
pooled: true
jmxExport: true
logSql: true
driverClassName: oracle.jdbc.OracleDriver
username: MYUSER
password: Password1
dbCreate: validate
url: jdbc:oracle:thin:@someserver:1521:TEST1
dataSource3:
pooled: true
jmxExport: true
logSql: true
driverClassName: oracle.jdbc.OracleDriver
username: MYUSER
password: Password1
dbCreate: validate
url: jdbc:oracle:thin:@someserver:1521:PROD1
然后在域类的映射中指定映射中的数据源:
package plsutils
class DmjTypes {
String code
String description
Date insertDate
String insertUser
Date modifyDate
String modifyUser
String dbEnv
static mapping = {
datasources(['dataSource1', 'dataSource2', 'dataSource3'])
version false
table name: "CDE_DMJ_TYPES", schema: "MYSCHEMA"
id generator: 'sequence' ,params:[sequence: 'DMJTY_SEQ']
columns {
id column: "DMJTY_ID"
code column: "DMJTY_CDE"
description column: "DMJTY_DESCR"
insertDate column: "INSERT_DTT"
insertUser column: "INSERT_USER"
modifyDate column: "MODIFY_DTT"
modifyUser column: "MODIFY_USER"
dbEnv formula:'( select inst.instance_name || \'-\' || inst.host_name from v$instance inst ) '
}
}
}
然后,在我的控制器中,我应该能够执行以下操作:
params.max = Math.min(max ?: 10, 100)
dmjTypesListDev = DmjTypes.dataSource1.list(params)
dmjTypesListTest = DmjTypes.dataSource2.list(params)
dmjTypesListProd = DmjTypes.dataSource3.list(params)
我在第一次调用时遇到错误:
URI /dmjTypes/index
Class groovy.lang.MissingPropertyException
Message null
Caused by No such property: dataSource1 for class: plsutils.DmjTypes
我正在使用 ojdbc7.jar,连接到 Oracle 11g,我正在使用 Grails 3.0.9。
我不禁认为我在某个地方做了一些非常愚蠢的事情。谁能帮我解决这个问题?
干杯, 艾伦
【问题讨论】:
-
嗨,你解决了这个问题吗?
-
是的,我确定上面的代码似乎可以工作。问题是我最近升级了我正在使用的 grails 版本。由于与列出 grails 版本的现有配置文件发生冲突,因此存在问题。我更新了配置文件以在 gradle.properties 文件(3.1.1)中拥有正确的 grails 版本,进行了彻底的清理和重建,它似乎可以工作。这里的教训是在升级 grails 版本时要小心,即使是次要版本。
标签: grails grails-orm