2015-08-25 18 views
38

Nella mia applicazione Spring Boot, voglio creare un file delle proprietà specifico per l'ambiente. Il tipo di imballaggio della mia applicazione in guerra e lo sto eseguendo in tomcat incorporato. Io uso le m ed eseguo il main dalle stesse maglie.File application.properties specifico per l'ambiente in Spring Boot application

  1. Posso avere un file di proprietà specifico per l'ambiente come l'applicazione - $ {env-value} .properties?

Nel caso di cui sopra, ENV-valore avranno valori/Negozi/test/prod locale

  1. Dove impostare il file env-valore? Per locale, posso impostarlo come argomento jvm tramite sts

  2. Chi legge application.properties in Spring Boot.

  3. Come caricare il file delle proprietà specifiche dell'ambiente? Ad esempio, se imposto il database uid, pwd, schema ecc in un file di proprietà specifico dell'ambiente, in tal caso l'origine dati sarà in grado di comprendere le proprietà al suo interno?

  4. Posso usare application.properties e il file application-local.properties allo stesso tempo?

+0

Hai letto [questo] (http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html)? Fondamentalmente è supportato out-of-the-box. –

+0

Ho fatto ma non funziona. Quindi ho il file application.properties e il file application-local.properties nella stessa posizione. il file application-local.properties contiene le proprietà relative a db. application.properties ha una singola proprietà in esso riguardante il mvc di primavera. Inoltre ho aggiunto -Dprofile = local come configurazione di debug ma questo valore non viene rilevato – user3534483

+0

perché è necessario impostare 'spring.active.profiles', quindi usare' -Dspring.active.profiles = local'. anziché. –

risposta

90

Primavera avvio già has support per profile proprietà in base.

Aggiungere semplicemente un file application-[profile].properties e specificare i profili da utilizzare utilizzando la proprietà spring.profiles.active.

-Dspring.profiles.active=local 

Questo caricherà la application.properties e la application-local.properties con le proprietà imperative quest'ultimo dal primo.

+0

È possibile sovrascrivere l'uso delle proprietà dell'applicazione con un altro file per un profilo specifico senza caricarli entrambi? Ad esempio per test o dev? –

+0

M. Deinum, anch'io ho un problema simile, ho application.yml e application-qa.yml e ho dato -Dspring.profiles.active = qa, entrambi i file vengono letti ma le proprietà da application-qa.yml non sono sovrascritte le proprietà da application.yml, vedo sempre le proprietà solo da application.yml? c'è un modo per specificare la priorità? – Suresh

+2

Ciao entrambi, Questo può risolvere i tuoi problemi. https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-properties Esempio: https://www.mkyong.com/spring-boot/spring-boot-profile-based-properties-and-yaml-example/ –

14

Sì, è possibile. Poiché stai utilizzando la molla, controlla l'annotazione su @PropertySource.

Anotate la configurazione con

@PropertySource("application-${spring.profiles.active}.properties") 

Si può chiamare quello che mai ti piace, e aggiungere più file locanda di proprietà, se ti piace troppo. Può essere utile se si dispone di più set e/o valori predefiniti che appartengono a tutti gli ambienti (può essere scritto anche con @PropertySource {..., ..., ...}).

@PropertySources(
    @PropertySource("application-${spring.profiles.active}.properties"), 
    @PropertySource("my-special-${spring.profiles.active}.properties"), 
    @PropertySource("overridden.properties")) 

Quindi è possibile avviare l'applicazione con l'ambiente

-Dspring.active.profiles=test 

In questo esempio, il nome verrà sostituito con l'applicazione-test-proprietà e così via.

+0

Il problema è che '$ spring.profiles.active}' è una stringa separata di matrice/virgola. Quindi potrebbe non fare ciò che ti aspetti/vuoi che faccia quando ci sono più profili attivi. –

+0

Questo è vero, ma funziona bene per due profili: uno predefinito e uno definito con PropertySource. Per una gestione più avanzata della proprietà, penso che dovrete guardare fuori dalla primavera. Anche PropertySource viene letto solo durante l'avvio. Altre librerie più avanzate per la gestione delle proprietà possono modificare anche le proprietà di esecuzione. – Tzen

+0

Questo ha funzionato, ma ancora non capisco perché ho dovuto farlo manualmente. In uno dei miei altri repository non ho dovuto farlo. –

0

che possiamo fare in questo modo:

in application.yml:

spring: 
    profiles: 
    active: test //modify here to switch between environments 
    include: application-${spring.profiles.active}.yml 

in applicazione-test.yml:

server: 
    port: 5000 

e application-local.yml:

server: 
    address: 0.0.0.0 
    port: 8080 

poi avvio la primavera avrà inizio la nostra applicazione come noi desideriamo.

Problemi correlati