2009-06-09 19 views
34

Grails 1.x consente di utilizzare file di configurazione esterni impostando la direttiva grails.config.locations. Esiste un approccio simile disponibile per esternalizzare la configurazione del database in Datasource.groovy (senza impostare JNDI)?Externalizing Grails Configurazione origine origine dati

Sarebbe utile essere in grado di configurare le credenziali di DB in un semplice file di configurazione all'esterno dell'applicazione.

Grazie in anticipo!

risposta

50

È possibile utilizzare un file delle proprietà specificato in grails.config.locations come modo per esternalizzare la configurazione dell'origine dati. Qui di seguito è come io di solito impostare un progetto Grails:

Nel mio DataSource.groovy ho specificare questo per l'ambiente di produzione:

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

a specificare un file delle proprietà esterne nel mio Config.groovy:

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

nel file delle proprietà (memorizzato in graal-app/conf /) mi specificare il reale informazioni origine dati:

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

Uso anche il file delle proprietà come metodo per sovrascrivere altri valori presenti in Config.groovy. Quando l'app viene distribuita, se devo modificare le informazioni dell'origine dati, modifica il file /WEB-INF/classes/app-config.properties e riavvio.

+0

Questo sembra proprio quello che stavo cercando! Grazie per la tua risposta chiara e concisa, John :) – miek

+10

Sembra un'ottima soluzione, tranne che per le modifiche apportate dopo un aggiornamento. Per esternalizzare la configurazione vedere http://blog.zmok.net/articles/2009/04/22/playing-with-grails-application-configuration –

+0

Come ha sottolineato Brad, questa non è una soluzione praticabile per schierare una guerra . Il link che pubblica è una risposta migliore. – Mike

24

La risposta sopra non esternalizza davvero la configurazione. È vicino, ma la configurazione è ancora presente nell'applicazione. Vorrei utilizzare un ambiente JVM var all'avvio dell'applicazione/server per puntare a una posizione esterna all'applicazione in cui si trova la configurazione esterna. Leggere l'ambiente var nel file config.groovy e utilizzarlo per ottenere il file di configurazione esterno. Qualcosa del genere:

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

Per me questo non funziona. Per ottenere una variabile di ambiente.

Migliore utilizzo:

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

Basta mettere la posizione del file di configurazione come segue nel Config.groovy presentare

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

e mettere tutti i dettagli circa DataSource e altri valori di configurazione nella vostra appropriata file. Quindi è possibile esternalizzare la configurazione e non è necessario riavviare per modificare i valori.

Problemi correlati