Ik heb een lente-opstarttoepassing.
Ik heb drie profielen in mijn applicatie-> ontwikkeling, enscenering en productie. Dus ik heb 3 bestanden
- application-development.yml
- application-staging.yml
- 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).
Antwoord 9
Het antwoord van Michael Yin is correct, maar een betere uitleg lijkt nodig te zijn!
Velen van jullie zeiden dat -D
de 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.active
is 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:
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.active
en het pad in -Dspring.config.location
application-dev.properties
Als we jar gebruiken in Unix OS, moeten we /
aan het einde van -Dspring.config.location
gebruiken, 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