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.