Учитывая необходимость извлечения данных из нескольких сред (prodA, prodB и т. Д.), Я создал определенные записи dataSource в файле конфигурации DataSource.Коммутатор Gorm для разных источников данных во время выполнения
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
}
}
}
Горм Домен Класс:
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
}
В приведенном выше класса домена, источник данных жестко к одному из конкретной среды источника данных (PRODA или prodB или даже какой-либо другой среды).
Во время выполнения, мне нужно использовать этот класс домена стрелять findBy
метод против конкретной базы данных на основе параметров запроса (который определяет тип среды (PRODA против prodB и т.д.).
Как переключить класс домена использовать конкретный источник данные во время выполнения?
Который на самом деле можно использовать как: 'def result1 = Foo." $ {Params.datasourcename} ". FindByFoo (foo)', чтобы сделать его еще более динамичным. –
Это одна из причин, почему Grails - это отличная структура. – cantoni
как сохранить новый экземпляр в выбранном источнике данных? –