鉴于需要从多个环境(prodA,prodB等)获取数据,我在DataSource配置文件中创建了特定的dataSource条目。
environments {
development {
dataSource_prodA_oracle {
dbCreate = "none"
url = "jdbc:oracle:thin:@//prodA.box.url.com:1521/prodADB"
driverClassName = "oracle.jdbc.OracleDriver"
username = "prodA_user"
password = "horribly_encoded_password"
passwordEncryptionCodec = PropertiesCodec
}
dataSource_prodB_oracle {
dbCreate = "none"
url = "jdbc:oracle:thin:@//prodb.box.url.com:1521/prodBDB"
driverClassName = "oracle.jdbc.OracleDriver"
username = "prodB_user"
password = "another_horribly_encoded_password"
passwordEncryptionCodec = PropertiesCodec
}
}
}
Gorm Domain类:
class Foo {
static mapping = {
version false
datasource 'prodA_oracle' //needs dynamic datasource behavior
createdDate type: Date, column: 'created_date'
id generator:'assigned', name:'fooId', type:'string'
}
static constraints = {
}
String fooId
String region
Date createdDate
}
在上面的域类中,datasource被硬编码到一个特定于环境的数据源(prodA或prodB甚至其他一些环境)。
在运行时,我需要使用此Domain类根据请求参数(指定环境类型(prodA vs prodB等))针对特定数据库触发findBy
方法。
如何在运行时切换域类以使用特定的数据源?
答案 0 :(得分:2)
您可以提供要通过此域名连接的数据源列表,例如
static mapping = {
datasources(['lookup', 'auditing'])
}
或将此域提供给所有数据源,例如
static mapping = {
datasources 'ALL'
}
您可以通过在查询中提及其名称来查询任何数据源,例如
def result1 = Foo.lookup.findByFoo(foo)
def result2 = Foo.auditing.findByFoo(foo)