2009-06-09 17 views
34

Grails 1.x umożliwia używanie zewnętrznych plików konfiguracyjnych poprzez ustawienie dyrektywy grails.config.locations. Czy istnieje podobne podejście do eksternalizacji konfiguracji bazy danych w Datasource.groovy (bez konfigurowania JNDI)?Uzgadnianie konfiguracji źródeł danych Grails

Pomocne może okazać się skonfigurowanie poświadczeń DB w prostym pliku konfiguracyjnym poza aplikacją.

Z góry dzięki!

Odpowiedz

50

Możesz użyć pliku właściwości określonego w pliku grails.config.locations jako sposobu na eksternalizację konfiguracji źródła danych. Poniżej jest jak ja zazwyczaj skonfigurować projektu Grails:

W moim DataSource.groovy mogę określić to dla środowiska produkcyjnego:

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

określić właściwości pliku an zewnętrzne w moim Config.groovy:

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

w pliku właściwości (przechowywane w grails-app/conf /) I określać informacje rzeczywiste źródło 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 sposobu na przesłonięcie innych wartości znajdujących się w Config.groovy. Po wdrożeniu aplikacji, jeśli muszę zmodyfikować informacje o źródle danych, po prostu edytuję plik /WEB-INF/classes/app-config.properties i restartuję.

+0

Wygląda na to, o co mi chodziło! Dziękuję za jasną i zwięzłą odpowiedź, John :) – miek

+10

To wygląda na świetne rozwiązanie, z wyjątkiem tego, że masz modyfikacje po aktualizacji. Aby uzyskać eksternalizację konfiguracji, zobacz: http://blog.zmok.net/articles/2009/04/22/playing-z-grygami-aplikacja -konfiguracji –

+0

Jak zauważył Brad, to nie jest opłacalne rozwiązanie do wdrożenia wojny . Link, który zamieszcza jest lepszą odpowiedzią. – Mike

24

Powyższa odpowiedź w rzeczywistości nie przekazuje konfiguracji. Jest blisko, ale konfiguracja wciąż znajduje się w aplikacji. Chciałbym użyć środowiska JVM var podczas uruchamiania aplikacji/serwera, aby wskazać lokalizację poza aplikacją, w której znajduje się konfiguracja zewnętrzna. Odczytaj środowisko var w pliku config.groovy i użyj go, aby uzyskać zewnętrzny plik konfiguracyjny. Coś takiego:

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

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

Lepsze wykorzystanie:

System.getenv().get("ENVVAR").toString() 
0

Wystarczy umieścić lokalizację pliku konfiguracyjnego w następujący sposób w Config.groovy złożyć

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ścić wszystkie szczegóły dotyczące źródła danych i innych wartości konfiguracyjnych w swoim stosowne plik. W związku z tym można przekazać na zewnątrz konfigurację i nie trzeba jej restartować w celu zmiany wartości.