我最近嘗試創建一個應用程序,允許我爲它們的值比較3個單獨的數據庫。這些數據庫是3個Oracle實例,它們包含(基本上)相同的數據庫,但在DEV/TEST/PROD設置中。無法配置Grails 3多個數據源
我想要做的是在GRAILS 3中創建一個Domain類。然後我希望能夠獲取該域類映射到的記錄,但是要爲所有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版本時要小心,即使它是小版本版本。 –