Uzewnętrznianie konfiguracji Grails Datasource

Grails 1.x umożliwia używanie zewnętrznych plików konfiguracyjnych poprzez ustawienie graili .config.lokalizacje dyrektywy. Czy istnieje podobne podejście do eksternalizacji konfiguracji bazy danych w Datasource.groovy (bez zakładania JNDI)?

Pomocne byłoby skonfigurowanie poświadczeń DB w prostym pliku konfiguracyjnym poza aplikacją.

Z góry dzięki!

Author: miek, 2009-06-09

4 answers

Możesz użyć pliku właściwości określonego w grails.config.lokalizacje jako sposób na zewnętrzną konfigurację źródła danych. Poniżej jest jak zwykle konfiguruję projekt Grails:

W moim źródle danych.groovy i określa to dla środowiska produkcyjnego:
  ....
  ....
  production {
    dataSource {
        dbCreate = "update"
        driverClassName = "com.myorg.jdbcDriverNotExists"
        url = ""
        username = ""
        password = ""
    }
  }
  ....
  ....

Określam zewnętrzny plik właściwości w moim Config.groovy: {]}

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

W pliku properties (przechowywanym w grails-app/conf/) podaję faktyczną informację o źródle danych:

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

Używam również Pliku właściwości jako sposób na nadpisanie innych wartości, które są w Config.Super. Po wdrożeniu aplikacji, Jeśli muszę zmodyfikować informacje o źródle danych, po prostu edytuję /WEB-INF/classes / app-config.Plik Właściwości i uruchom ponownie.

 51
Author: John Wagenleitner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-10 03:41:22

Powyższa odpowiedź tak naprawdę nie uzewnętrznia konfiguracji. On jest blisko, ale konfiguracja nadal rezyduje w aplikacji. Użyłbym środowiska JVM var podczas uruchamiania aplikacji / serwera, aby wskazać lokalizację poza aplikacją, w której znajduje się zewnętrzna konfiguracja. Odczyt środowiska var w konfiguracji.plik groovy i użyj go pobierz zewnętrzny plik konfiguracyjny. Coś takiego:

def extConfig = System.properties.getProperty('ENVVAR');
grails.config.locations = [ "file:${extConfig}/${appName}-config.groovy"]
 25
Author: Peter De Winter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-26 08:57:20

Dla mnie to nie działa. Aby uzyskać zmienną środowiskową.

Lepsze wykorzystanie:

System.getenv().get("ENVVAR").toString()
 1
Author: Simon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-29 11:03:23

Wystarczy umieścić lokalizację pliku konfiguracyjnego w następujący sposób w Config.groovy file

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"
    ]

I umieść wszystkie szczegóły dotyczące datasource i innych wartości konfiguracyjnych w odpowiednim pliku. W związku z tym można uzewnętrznić konfigurację i nie trzeba ponownie uruchamiać, aby zmienić wartości.

 0
Author: jchhane_bro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-28 10:13:54