Groovy:如何访问已在DataSource中设置的值

时间:2009-09-21 16:12:31

标签: groovy datasource

我有一个groovy应用程序,它使用Oracle DB作为DataSource。

在DataSource.groovy中,我设置了:

dataSource {
pooled = true
driverClassName = "oracle.jdbc.driver.OracleDriver"
username = "scott"
password = "tiger
//loggingSql = true
}

由于某些性能原因,我在以下列方式使用sql访问数据库:

def sql = Sql.newInstance("jdbc:oracle:thin:@localhost:1521:XE", "scott", "tiger", "oracle.jdbc.driver.OracleDriver") 

也就是说,用户名和密码在应用程序中硬连线两次。 我的问题是,是否可以在我的应用程序中解决已在DataSource.groovy中设置的属性用户名和密码。

提前致谢,

路易斯

3 个答案:

答案 0 :(得分:10)

解决方案是添加一些导入

import javax.sql.DataSource
import groovy.sql.Sql
import org.codehaus.groovy.grails.commons.ConfigurationHolder

和以下代码:

def _url      = ConfigurationHolder.config.dataSource.url
def _username = ConfigurationHolder.config.dataSource.username
def _password = ConfigurationHolder.config.dataSource.password
def _driver   = ConfigurationHolder.config.dataSource.driverClassName
def sql = Sql.newInstance(_url, _username, _password, _driver)

def query = "<your SQL query>"
sql.eachRow(query){
    println "ID: " + it.id // Whatever you need
}

答案 1 :(得分:1)

您可以通过数据源创建Sql类,例如

def sql = new Sql(myDataSource)

其中myDataSource - 类DataSource的对象(您可以在DataSource.groovy中声明您的DS)

答案 2 :(得分:0)

你不能只做以下事情吗? (假设dataSource是范围内的变量)

def sql = Sql.newInstance("jdbc:oracle:thin:@localhost:1521:XE", dataSource.username, dataSource.password, dataSource.driverClassName)