web-dev-qa-db-ja.com

Grailsデータソース構成の外部化

Grails 1.xでは、grails.config.locationsディレクティブを設定することにより、外部構成ファイルを使用できます。 (JNDIを設定せずに)Datasource.groovyのデータベース構成を外部化するために利用できる同様のアプローチはありますか?

アプリケーションの外部にある単純な構成ファイルでDB資格情報を構成できると便利です。

前もって感謝します!

36
miek

データソース構成を外部化する方法として、grails.config.locationsで指定されたプロパティファイルを使用できます。以下は、私が通常Grailsプロジェクトを設定する方法です。

DataSource.groovyで、本番環境にこれを指定します。

  ....
  ....
  production {
    dataSource {
        dbCreate = "update"
        driverClassName = "com.myorg.jdbcDriverNotExists"
        url = ""
        username = ""
        password = ""
    }
  }
  ....
  ....

Config.groovyで外部プロパティファイルを指定します。

grails.config.locations = [ "classpath:app-config.properties"]

プロパティファイル(grails-app/conf /に保存されている)で、実際のデータソース情報を指定します。

dataSource.driverClassName=Oracle.jdbc.OracleDriver
dataSource.url=jdbc:Oracle:thin:@Host:port:sid
dataSource.username=sa
dataSource.password=secret

また、Config.groovyにある他の値をオーバーライドする方法としてプロパティファイルを使用します。アプリがデプロイされているときに、データソース情報を変更する必要がある場合は、/ WEB-INF/classes /app-config.propertiesファイルを編集して再起動します。

51

上記の答えは、実際には構成を外部化するものではありません。彼は近くにいますが、構成はまだアプリケーションに存在しています。アプリケーション/サーバーの起動時にJVM環境変数を使用して、外部構成が存在するアプリケーションの外部の場所を指します。 config.groovyファイルの環境変数を読み取り、それを使用して外部構成ファイルを取得します。このようなもの:

def extConfig = System.properties.getProperty('ENVVAR');
grails.config.locations = [ "file:${extConfig}/${appName}-config.groovy"]
25
Peter De Winter

私にとってこれはうまくいきません。環境変数を取得します。

より良い使用法:

System.getenv().get("ENVVAR").toString()
1
Simon

Config.groovyファイルに次のように構成ファイルの場所を入力するだけです

grails.config.locations = [
            "file:/yourDirectory/${appName}/${Environment.current.name}-datasource.properties",
            "file:/yourDirectory/${appName}/${Environment.current.name}-config.groovy",
            "classpath:${appName}-${Environment.current.name}-datasource.properties",
            "classpath:${appName}-${Environment.current.name}-config.groovy"
    ]

そして、データソースとその他の構成値に関するすべての詳細を適切なファイルに入れます。したがって、構成を外部化でき、値を変更するために再起動する必要はありません。

0
jchhane_bro