Impostazione del profilo attivo e della posizione di configurazione dalla riga di comando in spring boot
Ho un'applicazione di avvio a molla.
Ho tre profili nella mia applicazione-> sviluppo, staging e produzione. Quindi ho 3 file
- sviluppo di applicazioni.mlg
- staging dell'applicazione.mlg
- applicazione-produzione.mlg
La mia applicazione .yml risiede all'interno di src/main/resources
. Ho impostato il profilo attivo nell'applicazione.yml come:
spring:
profiles.active: development
Gli altri 3 file di configurazione specifici del profilo sono presenti nella cartella C:\config
.
Sto usando il plugin gradle per eclipse. Quando provo a fare un " bootRun ", sto impostando gli argomenti della riga di comando nella mia configurazione gradle in eclipse come
-Dspring.profiles.active=staging -Dspring.config.location=C:\Config
Tuttavia, la proprietà della riga di comando non viene riflessa e il mio profilo attivo viene sempre impostato come sviluppo(che è quello che ho menzionato nelle applicazioni.file yml). Inoltre C:\Config la cartella non viene cercata per i file di configurazione specifici del profilo.
Penso che mi manchi qualcosa qui. Ho cercato di capirlo negli ultimi 2 giorni. Ma senza fortuna. Apprezzerei davvero qualsiasi aiuto.
8 answers
Ci sono due modi diversi per aggiungere/sovrascrivere le proprietà spring sulla riga di comando.
Opzione 1: Proprietà del sistema Java (argomenti VM)
È importante che i parametri-D siano prima dell'applicazione.vaso altrimenti non vengono riconosciuti.
java -jar -Dspring.profiles.active=prod application.jar
Opzione 2: Argomenti del programma
java -jar application.jar --spring.profiles.active=prod --spring.config.location=c:\config
Ho dovuto aggiungere questo:
bootRun {
String activeProfile = System.properties['spring.profiles.active']
String confLoc = System.properties['spring.config.location']
systemProperty "spring.profiles.active", activeProfile
systemProperty "spring.config.location", "file:$confLoc"
}
E ora bootRun raccoglie il profilo e le posizioni di configurazione.
Grazie mille @jst per il puntatore.
-Dspring.profiles.active=staging -Dspring.config.location=C:\Config
Non è corretto.
Dovrebbe essere:
--spring.profiles.active=staging --spring.config.location=C:\Config
È possibile utilizzare la seguente riga di comando:
java -jar -Dspring.profiles.active=[yourProfileName] target/[yourJar].jar
Penso che il tuo problema sia probabilmente legato alla tua primavera.config.posizione che non termina il percorso con"/".
Citare i documenti
Se primavera.config.la posizione contiene directory (al contrario dei file) che dovrebbero terminare in / (e verranno aggiunte con i nomi generati da spring.config.name prima di essere caricato).
Quando si imposta il profilo tramite il plugin Maven è necessario farlo tramite run.jvmArguments
mvn spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=production"
Con l'opzione di debug:
mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 -Dspring.profiles.active=jpa"
Ho visto questo viaggio un sacco di gente..spero che aiuti
C'è un altro modo impostando la variabile OS, SPRING_PROFILES_ACTIVE.
Per esempio:
SPRING_PROFILES_ACTIVE=dev gradle clean bootRun
Riferimento: Come impostare i profili Primavera attivi
La risposta di Michael Yin è corretta ma sembra essere necessaria una spiegazione migliore!
Molti di voi hanno detto che -D
è il modo corretto per specificare i parametri JVM e hai assolutamente ragione. Ma Michael ha anche ragione come menzionato nella documentazione Spring Boot Profiles .
Ciò che non è chiaro nella documentazione, è che tipo di parametro è: --spring.profiles.active
non è un parametro JVM standard, quindi se vuoi usarlo nel tuo IDE compila i campi corretti (cioè programma argomenti)