2015-02-06 25 views
0

我試圖在Grails 2.4.4項目中使用多個數據源。根據該文檔,這應該是可能的:Grails 2.4.4多個數據源,單獨的驅動程序,IntegrationSpec

http://www.grails.org/doc/2.4.4/guide/conf.html#multipleDatasources

我的主要數據源(一個我想用所有的域類)此刻正用H2,作爲配置由默認DataSource.groovy的配置。我的第二個,只讀數據源是SQL Server中,我試圖爲我DataSource.groovy中配置的頂層(所有環境共享)如下聲明一下:

ds { 
    pooled = true 
    dialect = "org.hibernate.dialect.SQLServer2008Dialect" 
    driverClassName = "net.sourceforge.jtds.jdbc.Driver" 
    url = "jdbc:jtds:sqlserver://myserver:1433/mydb;domain=mydomain;useNTLMv2=true;user=myuser" 
    dbCreate = "none" 
} 

(不要讓URL扔掉你 - 我只是不得不使用Windows身份驗證和JTDS,我也通過第三方客戶端測試過)

我將此注入到服務類中並使用它,並且所有內容都顯示爲掛鉤up:好:

def dataSource_ds 

def serviceMethod(){ 
    Sql ds = new Sql(dataSource_ds) 
    String query = "SELECT ... " 
    def results = ds.rows(query) 
    println "Results are ${results.size()}" 
    return "Some value" 
} 

但是,當我嘗試從IntegrationSpec支持的Inte gration測試,我發現我的查詢字符串引用的有效架構(如「dbo」)出現「架構未找到」錯誤。從此設置的任何錯誤的堆棧跟蹤看起來像這樣:

org.h2.jdbc.JdbcSQLException:Schema「DBO」not found; SQL語句: ... at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) at org.h2.message.DbException.get(DbException.java:169) at org.h2.message .DbException.get(DbException.java:146) 在org.h2.command.Parser.readTableOrView(Parser.java:4774) 在org.h2.command.Parser.readTableFilter(Parser.java:1083) 在有機.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1689) at org.h2.command.Parser.parseSelectSimple(Parser.java:1796) at org.h2.command.Parser.parseSelectSub(Parser.java:1683 ) at org.h2.command.Parser.parseSelectUnion(Parser.java:1526) at org.h2.command.Parser.parseSelect(Parser.java:1514)在org.h2.command.Parser.parse(Parser。)上,org.h2.command.Parser.parsePrepared(Parser.java:404) (org.h2.command.Parser.parse(Parser.java:278) )。 java:250) at org.h2.engine.Session.Org.h2.engine.Session.prepareLocal(Session.java:414) org.h2.command.Parser.prepareCommand(Parser.java:217) 。 prepareCommand(Session.java:363) ...

現在爲什麼這個數據源試圖使用H2驅動程序?

在情況下,它是相關的,我的集成測試是這樣的:

void "serviceMethod"() { 
    when: "service method is called" 
    String response = myService.serviceMethod() 
    then: "we should get the appropriate text back" 
    response.equals("Some value") 
} 

如果在服務類中,我硬代碼將使用Groovy SQL對象的構造連接,集成測試工作正常,並且任何堆棧跟蹤都通過JTDS驅動程序。但是當我嘗試使用注入的數據源時,情況很奇怪。

任何想法我在這裏做錯了嗎?

+0

看起來像這可能是由於集成測試和數據源的一些魔力。 http://www.grails.org/doc/latest/guide/testing.html#integration測試 「Grails使用內存中的H2數據庫進行集成測試,並在測試之間清除數據庫中的所有數據」 重試作爲功能測試來驗證,並在此更新。 – bryantrobbins 2015-02-06 02:12:25

回答

0

就關閉循環就這個問題和希望在這個監督救一個人的痛苦在未來:運行測試時

Grails使用的內存數據庫。確保在集成測試,這裏生產的其他方面的差異讀了起來: http://www.grails.org/doc/latest/guide/testing.html#integrationTesting

這一特性使得在很有趣的任何測試使用外部(只讀)數據源,但有些是可以預料的(從長遠來看,依賴於外部數據源的測試並不是一個很好的測試)。我希望在某個時候重構我的應用程序及其測試方法(例如,在測試期間使用簡單的DAO和模擬),因爲我並不在乎從應用程序的測試中斷言外部數據源的內容。

相關問題