Yay önyüklemesinde komut satırından etkin profil ve yapılandırma konumu ayarlama


164

Bir yay çizme uygulamam var.

Uygulamamda üç profilim var-> geliştirme, sahneleme ve üretim . 3 dosyam var

  1. Uygulamaya development.yml
  2. Uygulamaya staging.yml
  3. Uygulamaya production.yml

Benim application.yml içinde bulunur src/main/resources. Application.yml aktif profilini aşağıdaki gibi ayarladım:

spring:
  profiles.active: development

Diğer 3 profile özgü yapılandırma dosyaları C:\configklasörde bulunur.

Tutulma için gradle eklentisi kullanıyorum. Ben bir " bootRun " yapmaya çalıştığınızda , eclipse benim gradle yapılandırmasında komut satırı bağımsız değişkenleri ayarlıyorum

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

Ancak, komut satırı özelliği yansıtılmıyor ve etkin profilim her zaman geliştirme olarak ayarlanıyor (ki bu benim apps.yml dosyasında bahsettiğim). Ayrıca C: \ Config klasöründe profile özgü yapılandırma dosyaları aranmaz.

Sanırım burada bir şey eksik. Son 2 gündür anlamaya çalışıyorum. Ama şans yok. Gerçekten herhangi bir yardımı takdir ediyorum.


Lütfen bootRunkomut satırınızı da ekleyebilir misiniz
Biju Kunjummen

Eclipse'den çalıştırıyordum ve komut satırından şimdiye kadar değil. Ancak "gradle bootRun -Dspring.config.location = C: \ Config \ -Dspring.profiles.active = staging" kullanarak çalışmayı denedim ve aynı sonucu aldım.
O-OF-N

Yanıtlar:


343

Komut satırına yay özellikleri eklemenin / geçersiz kılmanın iki farklı yolu vardır.

Seçenek 1: Java Sistem Özellikleri (VM Bağımsız Değişkenleri)

-D parametrelerinin application.jar öğesinden önce olması önemlidir, aksi takdirde tanınmazlar.

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

2. Seçenek: Program bağımsız değişkenleri

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

45
-D parametrelerinin sırası gerçekten önemlidir :)
martin

3
tomcat konteynırı söylemek için bunu nasıl başarabilirsiniz? Bu durumda savaşımı tomcat'in webapps klasörüne koydum, profil bilgilerini nasıl sağlarım? sistem özelliklerini ayarlayarak?
prayagupd

@prayagupd evet, bash_profile'ınızda sistem özelliklerine sahip olabilirsiniz.
en iyi dileklerimle

2
@maneesh evet, dışa aktarılan env değişkenini kullanıyorum . SPRING_PROFILES_ACTIVE~/.bash_profileexport SPRING_PROFILES_ACTIVE=e2e
prayagupd

1
Siparişin önemli olduğunu söylediğinizde: Her iki argümanı da geçirebilir miyiz: -Dspring.profile.active ve -Dspring.config.location, böylece profil ilk argümana göre ayarlanır ve özellik dosyası ikinci argümanlar? Örn:java -Dspring.profiles.active=$ENV -Dspring.config.location=file:///aws-secrets-manager/properties/application-$ENV.properties /code/app.jar
Pramod Setlur

26

En iyi yöntem bunu bir VM "-D" argümanı olarak tanımlamak. Yaylı bot 1.x ve 2.x arasındaki farklara dikkat edin.

Etkinleştirilecek profiller komut satırında belirtilebilir:

Yaylı Bot 2.x

-Dspring-boot.run.profiles=local

Yaylı Bot 1.x

-Dspring.profiles.active=local

maven ile örnek kullanım:

Yaylı Bot 2.x

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

Yaylı Bot 1.x

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

Birden çok profil için virgülle ayırdığınızdan emin olun:

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

Bahar / bahar çizmesi mi demek istediniz? (İlkbahar 1x ve İlkbahar 2x)!
smilyface

1
@smilyface yaylı bot. yaylı bot ayrıca farklı versiyonlarda mevcuttur: mvnrepository.com/artifact/org.springframework.boot/spring-boot
Sma Ma

2
2.1.3 yay önyükleme kullanın ve -Dspring-boot.run.profiles=localişe yaramadı, -Dspring.profiles.active=localçalıştı.
Donghua Liu

spring-boot 2.2.0: her ikisi de çalışmak: -Dspring-boot.run.profilesve-Dspring.profiles.active
Grigory Kislin

18

Bunu eklemek zorunda kaldım:

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

Ve şimdi bootRun profili ve yapılandırma konumlarını seçer.

İşaretçi için çok teşekkürler @jst.


7
Bu aşağıdaki gibi çok daha basit olabilir: bootRun { systemProperties = System.properties }. Bu komut, -Danahtarla geçirilen tüm parametreleri aynı anahtarlarla systemPropertyeşlemek için eşler.
edufinn

Bu sadece kaliteli bir çözüm gibi görünüyor, genel bir çözüm yok mu?
user1767316

1
Bunu tam olarak nereye ekliyorsunuz? Build.gradle dosyasında mı yoksa dosya içinde belirli bir yerde mi?
Scala Tutkunları

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

Doğru değil.

olmalı:

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

3
Bu, "Tanınmayan seçenek: --spring.config.location" hatasına neden oluyor
James Watkins

-D, Java Sistemi özelliklerini ayarlamanın doğru yoludur. --something bir bash parametresidir.
Xdg

--spring.profiles.active iş benim için, docs.spring.io/spring-boot/docs/current/reference/html/…
Pushkar

Eclipse'de
Farklı

11
bu olabilir: aslında İKİ buna nasıl kullanıldığına bağlıdır, doğru java -Dspring.profiles.active=staging -Dspring.config.location=C:\Config your-spring-boot-app.jarVEYAjava your-spring-boot.jar --spring.profiles.active=staging --spring.config.location=C:\Config
Dexter Legaspi

9

aşağıdaki komut satırını kullanabilirsiniz:

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

9

OS değişkenini SPRING_PROFILES_ACTIVE olarak ayarlamanın başka bir yolu daha var .

örneğin:

SPRING_PROFILES_ACTIVE=dev gradle clean bootRun

Referans: Etkin Yay profilleri nasıl ayarlanır?


Evet ve bu, Gradle'ın sistem özelliklerini uygulamaya geçirme biçimiyle uğraşma ihtiyacını ortadan kaldırır.
ben3000

Bu düzgün bir yol. Ayrıca, veritabanı kullanıcılarını ve parolaları ve diğer hassas yapılandırmaları sürüm kontrolünde kontrol edilmemeleri için ayarlamak için de kullanılmalıdır.
Igor Donin

7

Aracılığıyla profili ayarlarken Maven eklentisi size yoluyla yapmak gerekirrun.jvmArguments

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

Hata ayıklama seçeneği ile:

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

Bu geziyi birçok insanda gördüm ... umarım yardımcı olur


1
şu şekilde değiştirildi mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar: bkz: docs.spring.io/spring-boot/docs/current/maven-plugin/examples/…
rwenz3l

@ rwenz3l Teşekkürler! benim için işe yarıyor, Spring Boot 1'den 2'ye bir proje geliştirdim. Şimdi hepsini bashrc'ime ekliyorum ... springmvn="mvn clean spring-boot:run -Dspring.profiles.active=local -Dspring-boot.run.profiles=local"
John Smith

5

Sorununuzun büyük olasılıkla "/" ile bitmeyen spring.config.location dosyanızla ilgili olduğunu düşünüyorum.

Belgeleri alıntılayın

Spring.config.location dizinleri içeriyorsa (dosyaların aksine) / ile bitmelidir ve yüklenmeden önce spring.config.name öğesinden oluşturulan adlarla eklenecektir).

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


Bu konuya işaret ettiğiniz için teşekkür ederiz. Ancak, -Dspring.profiles.active = staging -Dspring.config.location = C: \ Config \ komutunu çalıştırdığımda da bana aynı sorunu veriyor. Aktif profil bile yansıtılmıyor. Bazı nedenlerden dolayı komut satırımın geçmediğini düşünüyorum.
O-OF-N

1
Args'i bootRun'a geçirmek için bu soruda verilen tavsiyelere uymalısınız. Stackoverflow.com/questions/25079244/…
jst

Teşekkür ederim. Bu gerçekten yardımcı oldu.
O-OF-N

4

Michael Yin'in cevabı doğrudur, ancak daha iyi bir açıklama gerekli görünmektedir!

-DBirçoğunuz bunun JVM parametrelerini belirtmenin doğru yolu olduğunu ve kesinlikle haklı olduğunuzu söylemiştiniz . Ancak Michael, Spring Boot Profiles belgelerinde de belirtildiği gibi haklıdır .

Belgelerde net olmayan şey, ne tür bir parametredir: --spring.profiles.activestandart bir JVM parametresi değildir, bu nedenle IDE'nizde kullanmak istiyorsanız doğru alanları doldurun (örn. Program argümanları)


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.