Я обновляю приложение с Grails 2 до Grails 3. В приложении у меня есть служба Grails, где мне нужно выбрать источник данных на основе параметра URL. Итак, моя настройка в Grails 2 выглядит примерно так (псевдокод):
application.yml:
development:
dataSource_1_a
dataSourceSql getSqlInterface(Environment env) {
switch(env){
case Environment.A:
return new Sql(dataSource_2_a)
case Environment.B:
return new Sql(dataSource_2_b)
default:
throw new Exception("Invalid environment $env!")
}
}
a
dataSourceSql getSqlInterface(Environment env) {
switch(env){
case Environment.A:
return new Sql(dataSource_2_a)
case Environment.B:
return new Sql(dataSource_2_b)
default:
throw new Exception("Invalid environment $env!")
}
}
b
test:
dataSource_1_a
dataSourceSql getSqlInterface(Environment env) {
switch(env){
case Environment.A:
return new Sql(dataSource_2_a)
case Environment.B:
return new Sql(dataSource_2_b)
default:
throw new Exception("Invalid environment $env!")
}
}
a
dataSourceSql getSqlInterface(Environment env) {
switch(env){
case Environment.A:
return new Sql(dataSource_2_a)
case Environment.B:
return new Sql(dataSource_2_b)
default:
throw new Exception("Invalid environment $env!")
}
}
b
FooService.groovy:
Sql getSqlInterface(Environment env) {
switch(env){
case Environment.A:
return new Sql(dataSource_2_a)
case Environment.B:
return new Sql(dataSource_2_b)
default:
throw new Exception("Invalid environment $env!")
}
}
Но в Grails 3 мне еще не удалось использовать два источника данных в одном сервисе (с блоком dataSources
в application.yml
). Если я назову один из них dataSource
, то он будет работать, а другой нет. Я знаю, что вы можете сделать static mapping = { datasource 'secondary' }
, но это также не поддерживает несколько источников данных.