2017-01-13 25 views
0

我們在我們的Grails應用程序中創建了一個報告只讀數據庫克隆,作爲備用數據源,名爲「reporting」。按照grails使用動態查找器或標準時,這很好用MyDomain.reporting.findByXXXX(..etc..)如何在Grails 2.3.x中執行原始SQL查詢時指定備用數據源?

但是有一些討厭的查詢必須在原始SQL中完成。我們現在這樣做(在服務)的方式是

def sessionFactory; 

public static List getSomeBigNastyData(...) 
{ 
    sessionFactory.currentSession.createSQLQuery(
    """ 
    Big Ugly Query 
    """ 
    ).list(); 
} 

但這並不去報告數據庫和似乎沒有被指定「報告」的一種方式 - 有指定的方式要執行原始SQL的數據源?

回答

1

可以使用dataSource作爲注入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) 
    } 
} 

使用服務(如上述的例子),可以從基本上任何地方訪問它(控制器,服務,標籤庫,域等)

相關問題