Grails 3 服务中的多个数据源?
Multiple datasources in Grails 3 service?
我正在将应用程序从 Grails 2 升级到 Grails 3。在应用程序中,我有一个 Grails 服务,我需要根据 url 参数选择数据源。所以我在 Grails 2 中的设置看起来有点像这样(伪代码):
application.yml:
development:
dataSource_1_a
dataSource_2_a
dataSource_2_b
test:
dataSource_1_a
dataSource_2_a
dataSource_2_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 中,我还没有设法在同一个服务中使用两个数据源(在 application.yml
中有一个 dataSources
块)。如果我调用其中一个 dataSource
那么那个会起作用,但另一个不会。我知道您可以 static mapping = { datasource 'secondary' }
但这似乎也不支持多个数据源。
如您所见here您可以将多个数据源添加到您的域Class。
一个服务只能有一个数据源,但是您可以为每个数据源创建一个服务,并为管理请求创建一个服务,如下所示:
switch(Environment env){
case Environment.A:
return dataSourceAService.method()
case Environment.B:
return dataSourceBService.method()
default:
throw new Exception("Invalid environment $env!")
}
对我有用的是:
ApplicationContext context = Holders.grailsApplication.mainContext
switch (env) {
case Environment.A:
return new Sql((DataSource)context.getBean('dataSource_1_a'))
case Environment.B:
return new Sql((DataSource)context.getBean('dataSource_1_b'))
default:
throw new Exception("Invalid environment $env!")
}
我正在将应用程序从 Grails 2 升级到 Grails 3。在应用程序中,我有一个 Grails 服务,我需要根据 url 参数选择数据源。所以我在 Grails 2 中的设置看起来有点像这样(伪代码):
application.yml:
development:
dataSource_1_a
dataSource_2_a
dataSource_2_b
test:
dataSource_1_a
dataSource_2_a
dataSource_2_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 中,我还没有设法在同一个服务中使用两个数据源(在 application.yml
中有一个 dataSources
块)。如果我调用其中一个 dataSource
那么那个会起作用,但另一个不会。我知道您可以 static mapping = { datasource 'secondary' }
但这似乎也不支持多个数据源。
如您所见here您可以将多个数据源添加到您的域Class。
一个服务只能有一个数据源,但是您可以为每个数据源创建一个服务,并为管理请求创建一个服务,如下所示:
switch(Environment env){
case Environment.A:
return dataSourceAService.method()
case Environment.B:
return dataSourceBService.method()
default:
throw new Exception("Invalid environment $env!")
}
对我有用的是:
ApplicationContext context = Holders.grailsApplication.mainContext
switch (env) {
case Environment.A:
return new Sql((DataSource)context.getBean('dataSource_1_a'))
case Environment.B:
return new Sql((DataSource)context.getBean('dataSource_1_b'))
default:
throw new Exception("Invalid environment $env!")
}