2012-01-10 27 views
1

現在、設定ファイルを使用してアプリケーション設定を保存しています。私はそれがデータベース内にこれらの設定を保存することが可能かどうか、もしこれを達成する方法が不思議でしたか?あなたがデータベースに好きな保管とドメインクラスを使用してそれを読み出すことができるGrailsアプリケーションのデータベースにアプリケーション設定を保存して使用しますか?

挨拶

答えて

2

。これは、新しいコードを再デプロイしなくても変更を加えたい場合に特に便利です。しかし、プロパティにアクセスするたびにデータベースにヒットすることに気づくでしょう。

あなたはとConfigurationServiceを設定することができます。そして、あなたが必要な

ConfigurationController { 

    def configurationService 

    def refreshConfiguration = { 
     configurationService.refreshConfigurationValues() 
     render "Ahhh... That's refreshing :)" 
    } 
} 

は、今あなたが呼び出すことによって、あなたの設定値を更新することができたときに更新を強制するためにコントローラ/アクションを追加することができます

ConfigurationService { 
    static def configurationValues 

    def getConfigurationValues() { 
     if(configurationValues == null) { 
      refreshConfigurationValues() 
     } 
     configurationValues 
    } 

    def refreshConfigurationValues() { 
     configurationValues = //go get the values out of the database 
    } 
} 

: "http:// yoururl/appName/configuration/refreshConfiguration"

+0

私はデータベース内で持っていることを好む構成設定の束。たとえば、電子メールを送信するために使用されるユーザー名とパスワードのコンボ、ハッシュなどの暗号化に使用される秘密パスワードなどがあります。特定のドメインクラスをキャッシュすることができますが、変更するたびにキャッシュを再初期化したい可能な限りデータベースヒットをスキップしてください。 – Marco

+0

しかしそれがJarredsの提案です。 – david

+0

@david上記のMarcoのコメントの例を提供するコードを追加しました。 –

1

これは、BootStrap.groovyで実行できます。したがって、Jarredさんの答えにしたがって、保存したい設定データのドメインクラスを作成し、BootStrap.groovyファイルの中にこれらの値を入れてください。これは、構成値が存在しない場合は作成し、存在しない場合は何も行いません。

次に、ドメインクラスを使用して設定値にアクセスできます。 grailsApplication.config ...が時々手に負えないことがあるので、これをやりたいと思っています。

ドメインクラスMyConfig.groovy:

class MyConfig { 
    String type 
    String name 
    String value 
} 

BootStrap.groovy:そこに私の場合は

def myConfig = MyConfig.findByName("path") ?: new MyConfig(
    type: "Path" 
    name: "path" 
    value: "/var/tmp" 
).save(failOnError: true) 
+0

私はこれの初期化がBootStrap.groovyで行えることに同意します。しかし、あなたの設定オプションを作成すると、値を変更するために新しいコードを配備する必要があるため、問題は解決しません。これはConfig.groovyを使うのと同じ落とし穴です。さらに、あなたはどんな環境にいるのか(ハードではない)を決定するだけで、Config.groovyが提供するものと基本的に同じであることをすべて確認する必要があります。 –

関連する問題