Come si attiva un profilo Spring Boot quando si esegue da IntelliJ?


133

Ho 5 ambienti:

 - local (my development machine)
 - dev
 - qc
 - uat
 - live
 - staging

Voglio utilizzare diverse proprietà dell'applicazione per ciascun ambiente, quindi ho i seguenti file delle proprietà ciascuno con un URL diverso per l'origine dati:

 - application.properties  (containing common properties)
 - application-local.properties
 - application-dev.properties
 - application-qc.properties
 - application-uat.properties
 - application-live.properties

Sto usando IntelliJ e sto eseguendo la mia app usando bootRun nel plugin Gradle sul mio computer locale. Userò la distribuzione dello stesso file di guerra dell'applicazione su tutti gli altri ambienti che eseguono Tomcat.

Ho provato ad aggiungere:

--spring.profiles.active = locale

per eseguire la configurazione con i parametri dello script.

Ho provato ad aggiungere

-Dspring.profiles.active = locale

alla configurazione di esecuzione in Opzioni VM.

Né lavoro. Continuo a vedere il messaggio INFO all'avvio che dice: Nessun set di profili attivo, ritorno ai profili predefiniti: impostazione predefinita

Se eseguo la mia app dalla riga di comando di Windows utilizzando

gradle bootRun

ma ho prima impostato la variabile d'ambiente

set SPRING_PROFILES_ACTIVE=local

Quindi tutto funziona.

Quindi la mia domanda è: come posso attivare il mio profilo di avvio a molla locale quando eseguo bootRun da IntelliJ?


1
Perché stai eseguendo l'applicazione via gradle lì? Non sarebbe 10 volte più conveniente usare la configurazione della corsa? C'è un campo in cui puoi impostare i profili per abilitare ...
Stephane Nicoll,

Sto usando la configurazione di esecuzione in IntelliJ, come spiegato sopra. La sua non funziona.
Dleerob,

2
No non siete. Quello di cui sto parlando è la "Configurazione di avvio Spring Boot" Esegui -> Modifica configurazione> Nuovo> Spring Boot.
Stephane Nicoll,

Aah sì, mi sono allontanato dalla configurazione di esecuzione di Spring Boot perché avevo bisogno di espandere project.properties in application.properties nel mio build.gradle e se avessi usato la configurazione di esecuzione di Spring Boot, non avrebbe funzionato. Esaminerò la risoluzione di questo problema e quindi forse posso semplicemente utilizzare il campo del profilo attivo come hai suggerito
dleerob,

1
L'uso della configurazione di Spring Boot sembra più un problema che un valore. Il 'Make' copia semplicemente attraverso le risorse e non le filtra / modifica secondo lo script build. Quindi dirgli di eseguire la 'build' da gradle invece di 'make' provoca semplicemente il blocco della corsa. Se uso invece bootRun, insieme alla voce del mio ambiente come da risposta sotto, tutto funziona bene.
Dleerob,

Risposte:


194

Ho aggiunto -Dspring.profiles.active=testalle Opzioni VM e rieseguito nuovamente quella configurazione. Ha funzionato perfettamente.

Questo può essere impostato da

  • scelta Run | Edit Configurations...
  • Vai alla Configurationscheda
  • Espandi la Environmentsezione per rivelareVM options

Ero bloccato nella stessa situazione, ma per un progetto Maven. Grazie per l'aiuto. Abbiamo impostato l'opzione VM per ogni singolo file di test.
Sri9911,

2
Non funziona anche per me. Uso Gradle e due moduli (api e ui)
Virkom il

1
Non funziona neanche per me, anche usando il gradle qui.
IARI

Ciao, ho lo stesso problema ma questa correzione non risolve il problema. cosa si intende qui per ripetere la configurazione? è proprio come rieseguire l'attività?
user1456110

Ho eseguito quel particolare test dopo averlo modificato come mostrato.
Thom,

82

Se si utilizzano effettivamente le configurazioni di avvio a molla (attualmente supportate solo nella Ultimate Edition) è facile preconfigurare i profili nell'impostazione "Profili attivi".

inserisci qui la descrizione dell'immagine


1
Grazie, sono sicuro che funzionerebbe, tuttavia non sto usando la configurazione di esecuzione Spring Boot, sto usando la configurazione di esecuzione Gradle che non ha il campo "Profili attivi". Il mio gradle build filtra e modifica alcuni dei file delle proprietà che copia nella directory build, quindi sto usando la configurazione di esecuzione Grade per questo.
Dleerob,

Come ha sottolineato una risposta sopra: se questo non funziona per te, assicurati di passare argsnel tuo Application.main()esempioSpringApplication.run( Application.class, args );
Xaero Degreaz

Questa funzione è supportata solo nella versione Ultimate.
Julien Malige,

Grazie @JulienMalige per averlo segnalato. Modificherò la mia risposta.
Daniel Bubenheim,

11

Prova ad aggiungere questo comando nel tuo build.gradle

inserisci qui la descrizione dell'immagine

Quindi per l'esecuzione configurare quella forma:

inserisci qui la descrizione dell'immagine


9

Spring Boot sembra aver cambiato il modo di leggere le opzioni della VM mentre si evolve. Ecco un modo per provare quando si avvia un'applicazione in Intellij e si desidera attivare un profilo:

1. Modifica le opzioni della VM

Apri "Modifica configurazione" in "Esegui" e in "Opzioni VM", aggiungi: -Dspring.profiles.active=local

In realtà funziona con un mio progetto con Spring Boot v2.0.3.RELEASEe Spring v5.0.7.RELEASE, ma non con un altro progetto con Spring Boot v2.1.1.RELEASEe Spring v5.1.3.RELEASE.

Inoltre, quando si esegue con Maven o JAR, la gente ha menzionato questo:

mvn spring-boot:run -Drun.profiles=dev

o

java -jar -Dspring.profiles.active=dev XXX.jar

(Vedi qui: come utilizzare i profili di Spring Boot )

2. Passare gli argomenti JVM

È stato menzionato da qualche parte, che Spring cambia il modo di avviare il processo delle applicazioni se si specificano alcune opzioni JVM; biforca un altro processo e non supererà l'arg ricevuto, quindi non funziona. L'unico modo per passare le discussioni è:

mvn spring-boot:run -Dspring-boot.run.jvmArguments="..."

Ancora una volta, questo è per Maven. https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-debug.html

3. Impostazione (applicazione) env var

Quello che funziona per me per il secondo progetto, è stato impostare la variabile d'ambiente, come menzionato in alcune risposte sopra: "Modifica configurazione" - "Variabile d'ambiente", e:

SPRING_PROFILES_ACTIVE=local

1
Env var dovrebbe effettivamente essere SPRING_PROFILES_ACTIVE.
Josh M.

L'ho aggiunto in "Esegui configurazione" delle "Opzioni VM" di IDEA come "spring.profiles.active" e funziona. Forse un'altra forma come urs viene utilizzata a livello di sistema nelle proprietà del sistema?
WesternGun

Se lo stai aggiungendo ~/.profileo simile, devi usarlo SPRING_PROFILES_ACTIVE- spring.profiles.activeprobabilmente funziona solo come argomento sulla riga di comando.
Josh M.

1
Ah .. quindi intendi lo stesso di quanto sospettassi; vero sistema env non solo l'applicazione env. OK, faccio una modifica.
WesternGun

8

Ho finito per aggiungere quanto segue al mio build.gradle:

bootRun {
  environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "local"
}

test {
  environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "test"
}

Quindi ora quando si esegue bootRun da IntelliJ, il valore predefinito è il profilo "locale".

Sui nostri altri ambienti, imposteremo semplicemente la variabile di ambiente "SPRING_PROFILES_ACTIVE" in Tomcat.

L'ho preso da un commento trovato qui: https://github.com/spring-projects/spring-boot/pull/592


6

Una causa probabile potrebbe essere che non si passano i parametri della riga di comando nel metodo principale dell'applicazione. Ho fatto lo stesso errore alcune settimane fa.

public static final void main(String... args) {
    SpringApplication.run(Application.class, args);
}

Grazie per la risposta e il suggerimento, tuttavia sto trasmettendo gli argomenti.
Dleerob,

Questo in realtà ha risolto il mio problema. Per qualche ragione quando ho creato il progetto usando Gradle, non ha generato automaticamente la mia Applicationclasse, quindi lo ha fatto a mano dalla memoria. argsHo perso il passaggio, quindi la casella "Profili attivi" nella configurazione di esecuzione non ha funzionato - ho dovuto passare manualmente nella -Dspring.profiles.activecasella delle opzioni della macchina virtuale.
Xaero Degreaz,

3

Uso Intellij Community Edition. Vai su "Configurazioni di esecuzione / debug"> scheda Runner> Variabili d'ambiente> fai clic sul pulsante "...". Aggiungi: SPRING_PROFILES_ACTIVE = locale

spring.profiles.active


3

Per Spring Boot 2.1.0 e versioni successive è possibile utilizzare

mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar


2
Nella tua riga di comando saràspring-boot:run -Dspring-boot.run.profiles=local
Mr. K.

con spring-boot: esegui questa è la risposta
kakabali

2

Nel mio caso ho usato la configurazione di seguito in Opzioni VM in IntelliJ, non stava selezionando le configurazioni locali ma dopo un riavvio diIntelliJ ne selezionava i dettagli di configurazione IntelliJe il servizio iniziò a funzionare.

-Dspring.profiles.active=local

0

Prova questo. Modifica il tuo file build.gradle come segue.

ext { profile = project.hasProperty('profile') ? project['profile'] : 'local' }


-3

Impostato negli -Dspring.profiles.active=localargomenti del programma.


Ho rimosso le citazioni dalla mia domanda sopra. In realtà non sto usando le virgolette, stavo solo cercando di mostrare esattamente cosa stavo inserendo nei campi di configurazione della corsa
dleerob,

5
intendi opzioni VM!
Michail Michailidis,

Questa risposta è molto fuorviante poiché gli argomenti del programma non verranno riconosciuti dall'applicazione!
yuranos,

Questa risposta non funzionerà, come menzionato da altre persone, dovrebbe essere in Opzioni VM in IntelliJ Idea e non negli argomenti del programma
abstractKarshit
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.