2009-09-21 3 views
5

私はデータソースとしてOracle DBを使用しているGroovyアプリケーションを持っています。Groovy:DataSourceに既に設定されている値にアクセスする方法

私が設定したDataSource.groovyで

:私は次のように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") 

つまり、ユーザ名パスワードはアプリケーションで2回ハードワイヤードされています。 私のアプリケーションで、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

私のおかげで申し訳ありません:)しかし、何について def sql = new Sql(DataSourceとしてConfigurationHolder.config.dataSource) 通常はプールされ、より適切に構成されたDataSourceクラスを介して接続を取得するため、newInstanceを使用する方が効果的です。 –

+1

def sql = new Sql(DataSourceとしてConfigurationHolder.config.dataSource)が機能しません。すべてのdataSource情報、新しいSqlと一致しない引数を持つ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

私は自分自身を試していない。 def myDataSource = ConfigurationHolder.config.dataSourceを試してみてください。答えが正しい場合は返信してください。 –

+0

申し訳ありませんが、あなたの提案は例外をスローします。 org.codehaus.groovy.runtime.metaclass.MethodSelectionException:メソッド()を呼び出してこのリストから呼び出します。public groovy.sql.Sql#(javax.sql.DataSource)public groovy.sql.Sql#(groovy.sql.Sql)public groovy.sql.Sql#(java .sql.Connection) とにかく心配しないでください。私はあなたの提案に基づいて解決策を得ました。ありがとう! – Luixv

関連する問題