Grails 3服务中有多个数据源?

时间:2015-06-28 22:48:27

标签: grails grails-3.0

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

2 个答案:

答案 0 :(得分:1)

如您所见[{3}},您可以向域类添加多个dataSource。

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

   switch(Environment env){
   case Environment.A:
        return dataSourceAService.method()
    case Environment.B:
        return dataSourceBService.method()
    default:
        throw new Exception("Invalid environment $env!")
   }

答案 1 :(得分: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!")
}