1

これがシナリオです。Grailsアプリケーションの外部にurl/username / password/etcを含むファイルがあります。開発者が本番用の接続情報を表示できないようにするための情報。次のようにして、この情報をConfig.groovyに含めます。

grails.config.locations << "file:" + "C:/directory/from/env/variable/data.properties"

次に、POGOでこの情報にアクセスしていました。

import org.codehaus.groovy.grails.commons.ConfigurationHolder
...
ConfigurationHolder.config.url
ConfigurationHolder.config.userName
ConfigurationHolder.config.password

Grails 2.0にアップグレードした後、ConfigurationHolderが非推奨になっていることに気付きました。そこで、ドキュメント(http://grails.org/doc/latest/guide/conf.html)にアクセスして、修正方法を試してみました。ドキュメントには、grailsApplicationを使用して構成値を取得するように記載されています。私の問題は、私がPOGOにいて、grailsApplicationのGrails自動配線が呼び出されないことです。私の質問には2つの部分があります:

1)POGO内でファイルから構成情報を取得するためのより良い方法はありますか?

2)より良い方法がない場合、grailsApplicationをPOGOに注入するにはどうすればよいですか?

追加情報:私はGrails GLDAPOプラグイン(http://gldapo.codehaus.org/)を使用してLDAPディレクトリとインターフェイスしています。これらのオブジェクト(/ src / groovyの下に配置)をドメインオブジェクトと同じように動作させて、静的メソッドを実行できるようにしようとしていますfindBy...(..)。あなたが提案しているパターンでは、データをフェッチするためにサービスを実行する必要があります。悪くはないですが、Groovyほどではありません:)

4

2 に答える 2

5

更新された質問に基づく新しい回答。

いくつかのオプションがあります。1つはgrailsApplication、これらのクラスのメタクラスにワイヤリングすることですBootStrap.groovy

class BootStrap {

   def grailsApplication

   def init = { servletContext ->
      YourClass.metaClass.getGrailsApplication = { -> grailsApplication }
   }
}

getGrailsApplicationこれにより、プロパティとしてアクセスできるメソッドが追加されgrailsApplicationます。

別のオプションは、これらのクラスに静的grailsApplicationフィールドを追加し、それを次のように設定することですBootStrap

class BootStrap {

   def grailsApplication

   def init = { servletContext ->
      YourClass.grailsApplication = grailsApplication
   }
}

ホルダークラスの作成について説明しているこのブログ投稿と、コンストラクターのオーバーライドについて説明しているこのブログ投稿も参照してください。

于 2012-01-20T15:40:49.477 に答える
0

grailsApplication少なくとも間接的に、Beanを依存性注入できるアーティファクトから呼び出す必要があります。サービスまたはQuartzジョブ、あるいはPOGOを呼び出しているものに追加def grailsApplicationし、それを必要とするメソッド呼び出しのために、またはセッターで1回、grailsApplication.configを渡します。

于 2012-01-20T01:18:52.523 に答える