Actief profiel en configuratielocatie instellen vanaf de opdrachtregel in spring boot

Ik heb een lente-opstarttoepassing.

Ik heb drie profielen in mijn applicatie-> ontwikkeling, enscenering en productie. Dus ik heb 3 bestanden

  1. application-development.yml
  2. application-staging.yml
  3. application-production.yml

Mijn application.ymlbevindt zich in src/main/resources. Ik heb het actieve profiel in application.yml ingesteld als:

spring:
  profiles.active: development

De andere 3 profielspecifieke configuratiebestanden zijn aanwezig in de map C:\config.

Ik gebruik de gradle-plug-in voor eclipse. Wanneer ik een “bootRun” probeer uit te voeren, stel ik de opdrachtregelargumenten in mijn gradle-configuratie in eclipse in als

-Dspring.profiles.active=staging -Dspring.config.location=C:\Config

De eigenschap van de opdrachtregel wordt echter niet weergegeven en mijn actieve profiel wordt altijd ingesteld als ontwikkeling (degene die ik heb genoemd in het bestand applications.yml). Ook wordt de map C:\Config niet doorzocht naar profielspecifieke configuratiebestanden.

Ik denk dat ik hier iets mis. Ik ben al 2 dagen bezig om het uit te zoeken. Maar geen geluk. Ik zou alle hulp zeer op prijs stellen.


Antwoord 1, autoriteit 100%

Er zijn twee verschillende manieren waarop u veereigenschappen op de opdrachtregel kunt toevoegen/overschrijven.

Optie 1: Java-systeemeigenschappen (VM-argumenten)

Het is belangrijk dat de -D parameters vóór uw application.jar staan
anders worden ze niet herkend.

java -jar -Dspring.profiles.active=prod application.jar

Optie 2: Programmaargumenten

java -jar application.jar --spring.profiles.active=prod --spring.config.location=c:\config

Antwoord 2, autoriteit 11%

Mijn beste werkwijze is om dit te definiëren als een VM “-D” -argument. Let op de verschillen tussen veerlaars 1.x en 2.x.

De profielen die moeten worden ingeschakeld, kunnen worden opgegeven op de opdrachtregel:

Spring-Boot 2.x (werkt alleen met maven)

-Dspring-boot.run.profiles=local

Spring-Boot 1.x

-Dspring.profiles.active=local

voorbeeld gebruik met maven:

Spring-Boot 2.x

mvn spring-boot:run -Dspring-boot.run.profiles=local

Spring-Boot 1.x en 2.x

mvn spring-boot:run -Dspring.profiles.active=local

Zorg ervoor dat u ze scheidt met een komma voor meerdere profielen:

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

Antwoord 3, autoriteit 5%

-Dspring.profiles.active=staging -Dspring.config.location=C:\Config

is niet correct.

zou moeten zijn:

--spring.profiles.active=staging --spring.config.location=C:\Config

Antwoord 4, autoriteit 3%

Ik moest dit toevoegen:

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

En nu pikt bootRun de profiel- en configuratielocaties op.

Hartelijk dank @jst voor de pointer.


Antwoord 5, autoriteit 3%

Er is een andere manier door de omgevingsvariabele OSin te stellen, SPRING_PROFILES_ACTIVE.

voor bijv.:

SPRING_PROFILES_ACTIVE=dev gradle clean bootRun

Referentie: Active Spring-profielen instellen


Antwoord 6, autoriteit 2%

u kunt de volgende opdrachtregel gebruiken:

java -jar -Dspring.profiles.active=[yourProfileName] target/[yourJar].jar

Antwoord 7, autoriteit 2%

Als u het profiel instelt via de Maven-plug-in, moet u dit doen via run.jvmArguments

mvn spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=production"

Met debug-optie:

mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 -Dspring.profiles.active=jpa"

Ik heb deze reis veel mensen gezien..hoop dat het helpt


Antwoord 8

Ik denk dat uw probleem waarschijnlijk te maken heeft met uw spring.config.location die het pad niet op “/” beëindigt.

Citeer de documenten

Als spring.config.location mappen bevat (in tegenstelling tot bestanden), moeten deze eindigen op / (en worden ze toegevoegd aan de namen die zijn gegenereerd met spring.config.name voordat ze worden geladen).

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-application-property-files


Antwoord 9

Het antwoord van Michael Yin is correct, maar een betere uitleg lijkt nodig te zijn!

Velen van jullie zeiden dat -Dde juiste manier is om JVM-parameters op te geven en je hebt helemaal gelijk. Maar Michael heeft ook gelijk, zoals vermeld in Spring Boot Profilesdocumentatie.

Wat niet duidelijk is in de documentatie, is wat voor soort parameter het is: --spring.profiles.activeis geen standaard JVM-parameter, dus als je hem in je IDE wilt gebruiken vul de juiste velden in (dwz programmaargumenten)


Antwoord 10

Een manier waarop ik dit op intellij doe, is door een omgevingsvariabele op de opdracht in te stellen, zoals:

test setup op intellij

In dit geval stel ik het profiel in om te testen


Antwoord 11

Als je Gradle gebruikt:

-Pspring.profiles.active=local

Antwoord 12

We willen automatisch een eigenschappenbestand kiezen op basis van de naam van het profiel in spring.profiles.activeen het pad in -Dspring.config.location

application-dev.properties

Als we jar gebruiken in Unix OS, moeten we /aan het einde van -Dspring.config.locationgebruiken, anders geeft het onderstaande foutmelding.

p>

Fout :: java.lang.IllegalStateException: Bestandsextensie van de locatie van het configuratiebestand ‘file:/home/xyz/projectName/cfg’ is bij geen enkele PropertySourceLoader bekend. Als de locatie bedoeld is om naar een map te verwijzen, moet deze eindigen op ‘/’

Voorbeeld

java -Dspring.profiles.active=dev -Dspring.config.location=/home/xyz/projectName/cfg/ -jar /home/xyz/project/abc.jar

of

java -jar /home/xyz/project/abc.jar --spring.profiles.active=dev --spring.config.location=/home/xyz/projectName/cfg/

Antwoord 13

Voor mij hielp het om “/” toe te voegen aan het einde van de profiellocatie.

java -jar myjar.jar --spring.config.additional-location=env/ --spring.profiles.active=prod

Other episodes