在Grails2.3.x中执行原始SQL查询时,如何指定备用数据源?

在Grails2.3.x中执行原始SQL查询时,如何指定备用数据源?,sql,grails,datasource,Sql,Grails,Datasource,我们在名为“reporting”的Grails应用程序中设置了一个报告只读数据库克隆作为备用数据源。根据grailsMyDomain.reporting.findbyxxx(…等)使用动态查找器或条件时,这非常有效 然而,有些讨厌的查询必须在原始SQL中完成。我们目前的做法(在服务中)是 但是这并没有进入报告数据库,而且似乎也没有指定“报告”的方法——有没有方法指定要对其执行原始SQL的数据源?可以将数据源用作注入bean,并使用groovy.SQL.SQL运行查询。下面是一个简单的服务示例,它

我们在名为“reporting”的Grails应用程序中设置了一个报告只读数据库克隆作为备用数据源。根据grails
MyDomain.reporting.findbyxxx(…等)使用动态查找器或条件时,这非常有效

然而,有些讨厌的查询必须在原始SQL中完成。我们目前的做法(在服务中)是


但是这并没有进入报告数据库,而且似乎也没有指定“报告”的方法——有没有方法指定要对其执行原始SQL的数据源?

可以将
数据源
用作注入bean,并使用
groovy.SQL.SQL
运行查询。下面是一个简单的服务示例,它将使用您的数据源并允许您对其运行查询

package com.example

import groovy.sql.GroovyRowResult
import groovy.sql.Sql

class ExampleSqlService {
  def dataSource_reporting // your named data source

  List<GroovyRowResult> query(String sql) {
    def db = new Sql(dataSource_reporting)
    return db.rows(sql)
  }
}
package.com.example
导入groovy.sql.GroovyRowResult
导入groovy.sql.sql
类ExampleSqlService{
def dataSource_报告//您的命名数据源
列表查询(字符串sql){
def db=新Sql(数据源报告)
返回db.rows(sql)
}
}
使用服务(如上面的示例)允许您从任何地方(控制器、服务、标记库、域等)访问它

package com.example

import groovy.sql.GroovyRowResult
import groovy.sql.Sql

class ExampleSqlService {
  def dataSource_reporting // your named data source

  List<GroovyRowResult> query(String sql) {
    def db = new Sql(dataSource_reporting)
    return db.rows(sql)
  }
}