2015-01-04 15 views
8

Sto sviluppando un'applicazione di avvio di primaveraStivale Primavera application.properties esterni

voglio ignorare alcune proprietà in src/main/resources/application.properties con un file esterno (ad esempio /etc/projectName/application.properties).

Ho provato diversi metodi:

  1. @PropertySource("file:/etc/projectName/application.properties") come annotazione a ApplicationConfig.java

  2. spring.config.location=/etc/projectName/application.properties nei miei application.properties in resources

ho provato con spring.port. Il primo metodo ha aggiunto solo le proprietà ma non le ha sovrascritte.

+2

Rilasciare 'application.properties' nella stessa directory del file jar, verrà prelevato automaticamente. –

+0

Sto usando un file war, costruendo con maven in Intellij e distribuendolo in un Tomcat, quindi nessun file jar – greenhalos

+0

Aggiungi alla tua domanda in quanto ciò influenza la risposta. Indipendentemente da ciò dovresti usare l'opzione 2 dato che le proprietà caricate da Spring Boot sono ordinate in modo specifico, aggiungendo un '@ PropertySource' aggiungerai le tue proprietà caricate alla fine della catena di' PropertySource's consultate. –

risposta

15

Io uso sempre --spring.config.location= nella riga di comando come specificato nello documentation e puoi inserire vari file in questo, uno con valori predefiniti e un altro con quelli sovrascritti.

Edit:
In alternativa, si potrebbe anche usare qualcosa come:

@PropertySources({ 
    @PropertySource("classpath:default.properties") 
    , @PropertySource(value = "file:${external.config}", ignoreResourceNotFound = true) 
}) 

e specificare una external.config nei vostri application.properties.
Ciò fornirebbe un percorso predefinito per la configurazione di overriding, che è comunque sovrascrivibile specificando uno --external.config nella riga di comando.
Io uso questo con ${external.config} definito come variabile di sistema env, ma dovrebbe funzionare anche con una variabile application.properties.

+0

ma volevo farlo senza specificarlo nella riga di comando, ma nelle proprietà dell'applicazione o nelle annotazioni di culo – greenhalos

+2

vorrei davvero suggerire di non farlo in questo modo: significa che stai collegando il tuo codice sorgente con l'ambiente esterno, e in modo che il tuo il codice sorgente potrebbe non funzionare più su un'altra macchina (non parlando del privilegio di root necessario per scrivere il tuo file di configurazione). IMHO, le cose che sono specifiche dell'env esterno dovrebbero rimanere al di fuori della fonte. –

Problemi correlati