IntelliJ'den çalıştırırken bir Spring Boot profilini nasıl etkinleştiririm?


134

5 ortamım var:

 - local (my development machine)
 - dev
 - qc
 - uat
 - live
 - staging

Her ortam için farklı uygulama özelliklerinin kullanılmasını istiyorum, bu nedenle her biri veri kaynağı için farklı bir URL'ye sahip aşağıdaki özellik dosyalarına sahibim:

 - application.properties  (containing common properties)
 - application-local.properties
 - application-dev.properties
 - application-qc.properties
 - application-uat.properties
 - application-live.properties

IntelliJ kullanıyorum ve yerel makinemdeki Gradle eklentisinde bootRun kullanarak uygulamamı çalıştırıyorum. Tomcat'i çalıştıran diğer tüm ortamlarda aynı uygulama savaş dosyasını kullanacağım.

Eklemeyi denedim:

--spring.profiles.active = Yerel

komut dosyası parametreleri altındaki çalıştırma yapılandırmasına.

Eklemeyi denedim

-Dspring.profiles.active = Yerel

VM seçenekleri altındaki çalıştırma yapılandırmasına.

Hiçbiri çalışmıyor. Başlangıçta sürekli olarak INFO mesajının şunu söylediğini görüyorum: Aktif profil ayarlanmadı, varsayılan profillere geri dönüyorum: varsayılan

Uygulamamı Windows komut satırından çalıştırırsam

gradle bootRun

ama önce ortam değişkenini ayarladım

set SPRING_PROFILES_ACTIVE=local

Sonra her şey çalışır.

Öyleyse sorum şu, IntelliJ'den bootRun çalıştırırken yerel yay önyükleme profilimi nasıl etkinleştirebilirim?


1
Uygulamayı neden orada gradle ile çalıştırıyorsunuz? Çalıştırma yapılandırmasını kullanmak 10 kat daha uygun olmaz mıydı? Etkinleştirmek için profilleri ayarlayabileceğiniz bir alan var ...
Stephane Nicoll

Yukarıda açıklandığı gibi IntelliJ'de çalıştırma yapılandırmasını kullanıyorum. Çalışmıyor.
dleerob

2
Hayır değilsin. Bahsettiğim şey "Spring Boot run configuration" Run -> Edit configuration> New> Spring Boot.
Stephane Nicoll

Aah evet, build.gradle'ımdaki project.properties'i application.properties olarak genişletmem gerektiğinden Spring Boot run konfigürasyonundan uzaklaştım ve Spring Boot run konfigürasyonunu kullandıysam işe yaramadı. Bu sorunu çözmeye bakacağım ve sonra belki de önerdiğiniz gibi aktif profil alanını kullanabilirim
dleerob

1
Spring Boot yapılandırmasını kullanmak, değerinden daha fazla sorun gibi görünüyor. 'Yap', kaynakları basitçe kopyalar ve bunları derleme komut dosyasına göre filtrelemez / değiştirmez. Daha sonra, 'yap'ı' yapmak yerine gradle'dan çalıştırmasını söylemek, çalışmanın donmasına neden olur. Bunun yerine bootRun kullanırsam, aşağıdaki cevaba göre ortam girdimle birlikte, her şey yolunda gider.
dleerob

Yanıtlar:


195

-Dspring.profiles.active=testVM Seçeneklerine ekledim ve ardından bu yapılandırmayı yeniden çalıştırdım. Mükemmel çalıştı.

Bu, tarafından ayarlanabilir

  • seçme Run | Edit Configurations...
  • ConfigurationSekmeye git
  • Ortaya Environmentçıkarmak için bölümü genişletinVM options

Aynı durumda kaldım ama bir Maven projesi için. Yardım için teşekkürler. Her bir test dosyası için VM seçeneğini belirledik.
Sri9911

2
Benim için de çalışmıyor. Gradle ve iki modül kullanıyorum (api ve ui)
Virkom

1
Benim için de çalışmıyor, burada da gradle kullanıyor.
IARI

Merhaba, aynı sorunu yaşıyorum ama bu düzeltme sorunu çözmüyor. burada yapılandırmayı yeniden yapmakla kastedilen nedir? görevi yeniden yürütmek kadar mı?
user1456110

Bu testi gösterildiği gibi düzenledikten sonra çalıştırdım.
Thom

82

Yay önyükleme çalıştırma yapılandırmalarından gerçekten yararlanırsanız (şu anda yalnızca Ultimate Edition'da desteklenmektedir) "Aktif Profiller" ayarında profilleri önceden yapılandırmak kolaydır.

görüntü açıklamasını buraya girin


1
Teşekkürler, bunun işe yarayacağından eminim, ancak Spring Boot çalıştırma yapılandırmasını kullanmıyorum, "Etkin Profiller" alanına sahip olmayan Gradle çalıştırma yapılandırmasını kullanıyorum. Gradle derlemem, derleme dizinine kopyaladığı özellik dosyalarının bazılarını filtreler ve değiştirir, bu yüzden bunun için Grade run yapılandırmasını kullanıyorum.
dleerob

Yukarıdaki cevabın işaret ettiği gibi: Bu argssizin için Application.main()SpringApplication.run( Application.class, args );
işe yaramazsa

Bu özellik yalnızca Ultimate sürümünde desteklenmektedir.
Julien Malige

Bunu işaret ettiğiniz için teşekkürler @JulienMalige. Cevabımı düzenleyeceğim.
Daniel Bubenheim

11

Bu komutu build.gradle dosyanıza eklemeyi deneyin

görüntü açıklamasını buraya girin

Yani çalıştırmak için bu şekli yapılandırın:

görüntü açıklamasını buraya girin


9

Spring Boot, geliştikçe VM seçeneklerini okuma şeklini değiştirmiş görünüyor. Intellij'de bir uygulama başlattığınızda ve bir profili etkinleştirmek istediğinizde denemenin bir yolu:

1. Sanal makine seçeneklerini değiştirin

"Çalıştır" altında "Yapılandırmayı düzenle" yi açın ve "Sanal makine seçenekleri" nde ekleyin: -Dspring.profiles.active=local

Aslında ile benimkilerden biri projesi ile çalışır Spring Boot v2.0.3.RELEASEve Spring v5.0.7.RELEASEbaşka proje ile değil, Spring Boot v2.1.1.RELEASEveSpring v5.1.3.RELEASE .

Ayrıca, Maven veya JAR ile çalışırken, insanlar bundan bahsetti:

mvn spring-boot:run -Drun.profiles=dev

veya

java -jar -Dspring.profiles.active=dev XXX.jar

(Buraya bakın: Spring Boot profillerinin nasıl kullanılacağı )

2. JVM değiştirgelerini geçirme

Bir yerlerde, bazı JVM seçeneklerini belirtirseniz Spring'in uygulama sürecini başlatma şeklini değiştirdiği belirtilmiştir; başka bir süreci çatallar ve aldığı argümanı geçmez, böylece bu işe yaramaz. Değiştirgeleri ona aktarmanın tek yolu şudur:

mvn spring-boot:run -Dspring-boot.run.jvmArguments="..."

Yine, bu Maven için. https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-debug.html

3. (uygulama) env var ayarı

İkinci proje için benim için işe yarayan şey, yukarıdaki bazı cevaplarda belirtildiği gibi ortam değişkenini ayarlamaktı: "Yapılandırmayı düzenle" - "Ortam değişkeni" ve:

SPRING_PROFILES_ACTIVE=local

1
Env var aslında olmalıdır SPRING_PROFILES_ACTIVE.
Josh M.

Bunu "spring.profiles.active" gibi IDEA "VM options" ın "Run configuration" kısmına ekledim ve çalışıyor. Belki de urs gibi başka bir biçim sistem genelinde sistem özelliklerinde kullanılır?
WesternGun

Bunu ~/.profileveya benzerine ekliyorsanız , kullanmanız gerekir SPRING_PROFILES_ACTIVE- spring.profiles.activemuhtemelen yalnızca komut satırında bir argüman olarak çalışır.
Josh M.

1
Ah .. yani tahmin ettiğimle aynı şeyi kastediyorsun; gerçek sistem ortamı sadece uygulama ortamı değil. Tamam bir düzenleme yapıyorum.
WesternGun

8

Build.gradle'a aşağıdakileri ekledim:

bootRun {
  environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "local"
}

test {
  environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "test"
}

Şimdi IntelliJ'den bootRun çalıştırıldığında, varsayılan olarak "yerel" profil kullanılıyor.

Diğer ortamlarımızda, Tomcat'teki 'SPRING_PROFILES_ACTIVE' ortam değişkenini ayarlayacağız.

Bunu burada bulunan bir yorumdan aldım: https://github.com/spring-projects/spring-boot/pull/592


6

Muhtemel bir neden, komut satırı parametrelerini uygulama ana yöntemine geçirmemeniz olabilir. Birkaç hafta önce aynı hatayı yaptım.

public static final void main(String... args) {
    SpringApplication.run(Application.class, args);
}

Cevap ve öneri için teşekkürler, ancak argümanları
içeri aktarıyorum

Bu aslında sorunumu çözdü. Bazı nedenlerden dolayı, Gradle'ı kullanarak projeyi oluşturduğumda, sınıfımı otomatik olarak oluşturmadı, bu Applicationyüzden bellekten elle yaptı. argsAdımı kaçırdım ve bu nedenle çalıştırma yapılandırmasındaki "Aktif Profiller" kutusu işe yaramadı - -Dspring.profiles.activeVM seçenekleri kutusuna manuel olarak geçmek zorunda kaldım .
Xaero Degreaz

3

Intellij Community Edition'ı kullanıyorum. "Çalıştır / Hata Ayıklama Yapılandırmaları"> Çalıştırıcı sekmesine> Ortam değişkenlerine gidin> "..." düğmesine tıklayın. Ekle: SPRING_PROFILES_ACTIVE = yerel

spring.profiles.active


3

İçin Bahar Boot 2.1.0 ve üstü kullanabilirsiniz

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


2
Komut hattınızda şu olacakspring-boot:run -Dspring-boot.run.profiles=local
Bay K.

yaylı önyükleme ile çalıştırın: cevap bu
kakabali

2

Benim durumumda VM seçeneklerinde aşağıdaki yapılandırmayı kullandım IntelliJ, yerel yapılandırmaları seçmiyordu, ancak yeniden başlatıldıktan sonra IntelliJyapılandırma ayrıntılarını aldı IntelliJve hizmet çalışmaya başladı.

-Dspring.profiles.active=local

0

Bunu dene. Build.gradle dosyanızı aşağıdaki gibi düzenleyin.

ext { profile = project.hasProperty('profile') ? project['profile'] : 'local' }


-3

-Dspring.profiles.active=localProgram argümanları altında ayarlayın .


Yukarıdaki sorumdan alıntıları kaldırdım. Aslında alıntı kullanmıyorum, sadece çalıştırma yapılandırma alanlarına tam olarak ne koyduğumu göstermeye çalışıyordum
dleerob

5
VM seçeneklerini kastediyorsunuz!
Michail Michailidis

Program argümanları uygulama tarafından tanınmayacağından bu cevap çok yanıltıcıdır!
yuranos

Bu cevap, diğerlerinin de belirttiği gibi, işe yaramayacak, IntelliJ Idea'daki VM Options altında olmalı ve program argümanlarında değil
abstractKarshit
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.