0

我正在将应用程序从 Grails 2 升级到 Grails 3。在应用程序中,我有一个 Grails 服务,我需要根据 url 参数选择数据源。所以我在 Grails 2 中的设置看起来像这样(伪代码):

应用程序.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 中,我还没有设法在同一个服务中使用两个数据源(在 中带有一个dataSourcesapplication.yml)。如果我打电话给其中一个,dataSource那么那个会起作用,但另一个不起作用。我知道您可以这样做static mapping = { datasource 'secondary' },但这似乎也不支持多个数据源。

4

2 回答 2

1

正如您在此处看到的,您可以将多个数据源添加到您的域类。

一个服务只能有一个数据源,但您可以为每个数据源和一个管理请求的服务创建一个服务,如下所示:

   switch(Environment env){
   case Environment.A:
        return dataSourceAService.method()
    case Environment.B:
        return dataSourceBService.method()
    default:
        throw new Exception("Invalid environment $env!")
   }
于 2015-06-29T06:12:42.547 回答
0

对我有用的是:

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!")
}
于 2015-08-11T11:40:36.437 回答