2012-02-17 23 views
7

從sql文檔中的下面的例子。如果我使用這兩種方法中的任何一種在grails服務類中創建一個sql實例,它會使用grails連接池嗎?它會參與任何交易功能嗎?我需要自己關閉連接嗎?還是會自動回到游泳池?如果我在grails中使用groovy sql類,它是否使用grails連接池?

def db = [url:'jdbc:hsqldb:mem:testDB', user:'sa', password:'', driver:'org.hsqldb.jdbcDriver'] 
    def sql = Sql.newInstance(db.url, db.user, db.password, db.driver) 

,或者如果你有(從連接池中也許)現有連接或數據源使用的構造函數:

def sql = new Sql(datasource) 

現在你可以調用SQL,例如創建一個表:

sql.execute ''' 
     create table PROJECT (
      id integer not null, 
      name varchar(50), 
      url varchar(100), 
     ) 
''' 

回答

7

如果執行:

Sql.newInstance(...) 

您將創建一個新的連接,您不使用連接池。

如果你想使用連接池,您可以創建具有以下命令服務:

grails create-service org.foo.MyService 

然後,在你的MyService.groovy文件,你可以管理交易如下:

import javax.annotation.PostConstruct 

class MyService { 
    def dataSource    // inject the datasource 
    static transactional = true // tell groovy that the service methods will be transactional 


    def doSomething() { 
     sql = new Sql(dataSource) 
     //rest of your code 
    } 
} 

有關詳細信息你可以閱讀:http://grails.org/doc/2.0.x/guide/services.html

編輯:

要管理多個數據源,您可以根據您的Grails版本執行以下操作之一。

如果您使用的是Grails的版本高於1.1.1(不2.X),你可以使用下面的插件:

http://grails.org/plugin/datasources 

如果您在使用Grails 2.X可以使用出內置支持:

http://grails.org/doc/2.0.0.RC1/guide/conf.html#multipleDatasources 
+0

埃內斯托你好,我意識到我沒有給我真正需要回答的問題添加足夠的信息。我有多個數據源,直到我在運行時看到數據源,我纔會知道。我相信我不能將多個數據源注入服務。所以更大的問題是我怎樣才能選擇我想要去哪個數據庫,使用Sql類,並獲得自動池。我可能想在除服務類之外的類中進行此操作。我不需要服務交易管理。 – Andrew 2012-02-17 04:01:06

1

如果創建Sql對象這樣我相信它會使用連接池

class SomeSerive { 

    SessionFactory sessionFactory 

    def someMethod() { 
    Sql sql = new Sql(sessionFactory.currentSession.connection()) 
    } 
}