Groovy: как получить доступ к значениям, уже установленным в DataSource - PullRequest
6 голосов
/ 21 сентября 2009

У меня есть отличное приложение, которое использует базу данных Oracle в качестве источника данных.

В 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 ]

10 голосов
/ 23 сентября 2009

Решение состоит в том, чтобы добавить импорт

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 голос
/ 21 сентября 2009

Вы можете создать класс Sql по источнику данных, например

def sql = new Sql(myDataSource)

где myDataSource - объект класса DataSource (вы можете объявить свой DS в DataSource.groovy)

0 голосов
/ 21 сентября 2009

Не могли бы вы просто сделать следующее? (при условии, что dataSource является переменной в области видимости)

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