2011-11-09 48 views
1

我們的應用程序定義了一個Datasource.groovy。 我使用它在控制器這樣從groovy中的dataSource獲取連接對象

import javax.sql.DataSource 
class xxx { 
javax.sql.DataSource dataSource 

def myappsql = new Sql(dataSource) 
myappsql.row(querystring) ..... 

} 

我需要從數據源獲取連接對象,這可能直接像這樣:

Connection conn = myappsql.getConnection() 

因爲這是給我的錯誤,不是必須是groovy.sql.Sql才能完成此調用?

我試圖避免從頭創建一個連接對象,用戶,密碼和url字符串,而是重用數據源中聲明的一個。

+0

你正在得到什麼確切的錯誤? –

回答

3

而不是依賴注入的DataSource,你可以依賴注入SessionFactory

import org.hibernate.SessionFactory 
import groovy.sql.Sql 

class SomeService { 

    static transactional = true 
    SessionFactory sessionFactory 

    void someMethod() { 
     // Get a connection object that participates in the current transaction 
     def connection = sessionFactory.currentSession.connection() 

     // Use the connection to create a Sql instance 
     Sql sql = new Sql(connection) 
    } 
} 
+0

謝謝各位提示,現在我從配置文件的持有者.config.datasource.url,...用戶名,密碼等等,然後創建連接,獲取所需的個人變量。因此,我已經刪除了對連接變量進行硬編碼 –

2

你應該能夠做到:

conn = myappsql.datasource.connection 

我相信你得到的錯誤,你construct the Sql object with a datasource

+0

它沒有工作..運行myappsql.dataSource.getconnection()給我一個對象,但它不是與java.sql.Connection類型相同。我打印出conn對象,它說:「來自DataSource的目標連接的事務感知代理[[email protected]]」,因爲它應該像「[email protected] 「。我嘗試在Jasper Report調用中使用其他連接對象,但它不工作。 –

+0

@pri_dev它是什麼類型?我必須再次猜測嗎? 'println myappsql.datasource?.connection?.class?.name'是什麼打印出來的? –