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

Lui*_*ixv 6 groovy datasource

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

在DataSource.groovy我设置:

dataSource {
pooled = true
driverClassName = "oracle.jdbc.driver.OracleDriver"
username = "scott"
password = "tiger
//loggingSql = true
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

提前致谢,

路易斯

Lui*_*ixv 10

解决方案是添加一些导入

import javax.sql.DataSource
import groovy.sql.Sql
import org.codehaus.groovy.grails.commons.ConfigurationHolder
Run Code Online (Sandbox Code Playgroud)

和以下代码:

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
}
Run Code Online (Sandbox Code Playgroud)

  • def sql = new Sql(ConfigurationHolder.config.dataSource as DataSource)不起作用.我们得到一个包含所有dataSource信息的MAP,这些参数与新的Sql不匹配.解决方案由Luixv工作,谢谢! (2认同)