2009-09-21 5 views
5

DataSource로 Oracle DB를 사용하는 그루비 응용 프로그램이 있습니다. DataSource.groovy에에서Groovy : DataSource에 이미 설정된 값에 액세스하는 방법

이 내가 설정 한 : 몇 가지 포인트 나는 다음과 같은 방법으로 SQL을 사용하여 DB를 accesing 오전 일부 성능상의 이유로

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

:

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

은 즉, 사용자 이름 및 암호는 응용 프로그램에서 두 번 하드 와이어됩니다. 내 질문에 내 응용 프로그램에서 DataSource.groovy에 이미 설정된 사용자 이름 및 암호 속성을 지정할 수 있는지 여부가 궁금합니다. 사전에

감사합니다,

루이스

방금 ​​다음을 수행 할 수 없습니다
+1

try def myDataSource = ConfigurationHolder.config.dataSource? –

답변

10

용액 일부 수입

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

및 FO를 추가하는 것 코드 작성 중 :

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 
} 
+0

내 annoing 죄송합니다 :)하지만 어쨌든 def sql = new Sql (DataSource로 ConfigurationHolder.config.dataSource) 일반적으로 풀링되고 더 잘 구성된 DataSource 클래스를 통해 연결을 얻으므로 newInstance가 더 효과적입니다. –

+1

def sql = new Sql (DataSource로 ConfigurationHolder.config.dataSource)이 작동하지 않습니다. 새로운 Sql과 일치하지 않는 모든 dataSource 정보, 인수를 가진 MAP을 얻습니다. 솔루션 추가 Luixv 작품, 감사합니다! –

+0

Grails 2.0부터,'ConfigurationHolder'는 더 이상 사용되지 않습니다. 대신에,'grailsApplication' 객체를 삽입하고'grailsApplication.config.dataSource. * '를 사용하십시오. – andysh

0

? 당신은 예를 들어, 데이터 소스하여 SQL 클래스를 만들 수 있습니다

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

dataSource는이 페이지의 범위에서 변수가 아닙니다. – Luixv

1

(즉, 데이터 소스를 가정하는 범위에서 변수입니다)

위한 myDataSource이
def sql = new Sql(myDataSource) 

- 클래스 데이터 소스의 오브젝트 (당신이 얻을 수있는 DS는 데이터 소스에 선언 에는 .groovy)

+0

답변 해 주셔서 감사합니다. "myDataSource"를 정의하는 방법을 알려주십시오. 사실 DataSource.groovy는 이미 dataSource를 정의했습니다. 내 질문은이 변수에 액세스하는 방법입니다. 미리 감사드립니다. Luis – Luixv

+0

나는 나 자신을 시험해 보지 않는다. org.codehaus.groovy.runtime.metaclass.MethodSelectionException :이 좋아, 그들에게 내가 대답 –

+0

를 해결하고있어 불행하게도 당신의 제안이 예외가 발생하는 경우 데프위한 myDataSource = ConfigurationHolder.config.dataSource가 다시 나를 포기하려고 찾을 수 없습니다 어떤 이 목록에서 호출 할 방법 () : public groovy.sql.Sql # (javax.sql.DataSource) public groovy.sql.Sql # (groovy.sql.Sql) public groovy.sql.Sql # (java .sql.Connection) 어쨌든 걱정하지 마십시오. 당신의 제안에 근거한 해결책이 있습니다. 감사! – Luixv

관련 문제