Bagaimana cara saya mengaktifkan profil Boot Musim Semi ketika menjalankan dari IntelliJ?


133

Saya memiliki 5 lingkungan:

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

Saya ingin properti aplikasi yang berbeda digunakan untuk masing-masing lingkungan, jadi saya memiliki file properti berikut yang masing-masing memiliki URL berbeda untuk sumber data:

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

Saya menggunakan IntelliJ dan menjalankan aplikasi saya menggunakan bootRun di plugin Gradle di mesin lokal saya. Saya akan menggunakan menyebarkan file perang aplikasi yang sama di semua lingkungan lain yang menjalankan Tomcat.

Saya sudah mencoba menambahkan:

--spring.profiles.active = lokal

untuk menjalankan konfigurasi di bawah parameter skrip.

Saya sudah mencoba menambahkan

-Dspring.profiles.active = lokal

untuk menjalankan konfigurasi di bawah opsi VM.

Tidak bekerja Saya terus melihat pesan INFO pada saat startup mengatakan: Tidak ada profil aktif yang diatur, kembali ke profil default: default

Jika saya menjalankan aplikasi saya dari baris perintah windows menggunakan

gradle bootRun

tapi saya pertama-tama mengatur variabel lingkungan

set SPRING_PROFILES_ACTIVE=local

Lalu semuanya bekerja.

Jadi pertanyaan saya adalah, bagaimana cara mengaktifkan profil booting semi lokal saya saat menjalankan bootRun dari IntelliJ?


1
Mengapa Anda menjalankan aplikasi via gradle di sana? Bukankah 10 kali lebih nyaman menggunakan konfigurasi yang dijalankan? Ada bidang tempat Anda dapat mengatur profil untuk mengaktifkan ...
Stephane Nicoll

Saya menggunakan konfigurasi jalankan di IntelliJ, seperti yang dijelaskan di atas. Ini tidak bekerja.
dleerob

2
Tidak, bukan kau. Yang saya bicarakan adalah konfigurasi "Spring Boot run" Run -> Edit configuration> New> Spring Boot.
Stephane Nicoll

Ya, saya pindah dari konfigurasi menjalankan Boot Spring karena saya perlu memperluas project.properties ke application.properties di build.gradle saya dan jika saya menggunakan konfigurasi run Boot Spring, sepertinya tidak berfungsi. Saya akan melihat ke penyelesaian masalah itu dan kemudian mungkin saya bisa menggunakan bidang profil aktif seperti yang Anda sarankan
dleerob

1
Menggunakan konfigurasi Spring Boot tampaknya lebih banyak masalah daripada nilainya. 'Make' hanya menyalin seluruh sumber daya dan tidak memfilter / mengubahnya sesuai dengan skrip pembuatan. Kemudian menyuruhnya untuk menjalankan 'build' dari gradle alih-alih 'make' hanya menyebabkan run membeku. Jika saya menggunakan bootRun sebagai gantinya, bersama dengan entri lingkungan saya sesuai jawaban di bawah ini, semua berfungsi dengan baik.
dleerob

Jawaban:


194

Saya menambahkan -Dspring.profiles.active=testke Opsi VM dan kemudian menjalankan kembali konfigurasi itu. Itu bekerja dengan sempurna.

Ini dapat diatur oleh

  • Memilih Run | Edit Configurations...
  • Buka Configurationtab
  • Luaskan Environmentbagian untuk mengungkapkanVM options

Saya terjebak dalam situasi yang sama tetapi untuk proyek Maven. Terima kasih untuk bantuannya. Kami telah menetapkan opsi VM untuk masing-masing dan setiap file uji.
Sri9911

2
Itu tidak bekerja untuk saya juga. Saya menggunakan gradle dan dua modul (api dan ui)
Virkom

1
Tidak bekerja untuk saya juga, juga menggunakan gradle di sini.
IARI

HI, saya memiliki masalah yang sama tetapi perbaikan ini tidak memperbaiki masalah ini. apa yang dimaksud di sini oleh reran konfigurasi? apakah ini sama seperti menjalankan kembali tugas?
user1456110

Saya menjalankan tes tertentu setelah mengeditnya seperti yang ditunjukkan.
Thom

82

Jika Anda benar-benar menggunakan konfigurasi spring boot run (saat ini hanya didukung di Ultimate Edition), mudah untuk melakukan pra-konfigurasi profil di pengaturan "Profil Aktif".

masukkan deskripsi gambar di sini


1
Terima kasih, saya yakin ini akan berhasil, namun saya tidak menggunakan konfigurasi menjalankan Boot Spring, saya menggunakan konfigurasi run Gradle yang tidak memiliki bidang "Profil Aktif". Gradle build filter saya dan memodifikasi beberapa file properti yang disalinnya ke direktori build, jadi saya menggunakan konfigurasi Grade run untuk ini.
dleerob

Sebagai jawaban di atas menunjukkan: jika ini tidak bekerja untuk Anda, pastikan bahwa Anda lewat di misalnya argsAndaApplication.main()SpringApplication.run( Application.class, args );
Xaero Degreaz

Fitur ini hanya didukung dalam edisi Ultimate.
Julien Malige

Terima kasih @JulienMalige untuk menunjukkan ini. Saya akan mengedit jawaban saya.
Daniel Bubenheim

11

Coba tambahkan perintah ini di build.gradle Anda

masukkan deskripsi gambar di sini

Jadi untuk menjalankan konfigurasi bentuk itu:

masukkan deskripsi gambar di sini


9

Spring Boot tampaknya telah mengubah cara membaca opsi VM saat berevolusi. Berikut ini beberapa cara untuk dicoba ketika Anda meluncurkan aplikasi di Intellij dan ingin mengaktifkan beberapa profil:

1. Ubah opsi VM

Buka "Edit konfigurasi" di "Jalankan", dan di "opsi VM", tambahkan: -Dspring.profiles.active=local

Ini sebenarnya bekerja dengan satu proyek saya dengan Spring Boot v2.0.3.RELEASEdan Spring v5.0.7.RELEASE, tetapi tidak dengan proyek lain dengan Spring Boot v2.1.1.RELEASEdan Spring v5.1.3.RELEASE.

Juga, ketika berlari dengan Maven atau JAR, orang-orang menyebutkan ini:

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

atau

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

(Lihat di sini: cara menggunakan profil Spring Boot )

2. Melewati argumentasi JVM

Disebutkan di suatu tempat, bahwa Spring mengubah cara meluncurkan proses aplikasi jika Anda menentukan beberapa opsi JVM; itu fork proses lain dan tidak akan melewati arg yang diterima sehingga ini tidak berfungsi. Satu-satunya cara untuk memberikan argumen kepadanya, adalah:

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

Sekali lagi, ini untuk Maven. https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-debug.html

3. Pengaturan (aplikasi) env var

Apa yang berhasil bagi saya untuk proyek kedua, adalah mengatur variabel lingkungan, seperti yang disebutkan dalam beberapa jawaban di atas: "Edit konfigurasi" - "Variabel lingkungan", dan:

SPRING_PROFILES_ACTIVE=local

1
Seharusnya env var SPRING_PROFILES_ACTIVE.
Josh M.

Saya menambahkannya di "Jalankan konfigurasi" IDEA "opsi VM" seperti "spring.profiles.active" dan berfungsi. Mungkin bentuk lain seperti urs digunakan di seluruh sistem di properti sistem?
WesternGun

Jika Anda menambahkannya ~/.profileatau serupa, Anda harus menggunakan SPRING_PROFILES_ACTIVE- spring.profiles.activesepertinya hanya berfungsi sebagai argumen di baris perintah.
Josh M.

1
Ah .. jadi maksudmu sama dengan dugaanku; Sistem nyata, bukan hanya aplikasi. OK saya edit.
WesternGun

8

Saya akhirnya menambahkan yang berikut ini ke build.gradle saya:

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

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

Jadi sekarang ketika menjalankan bootRun dari IntelliJ, defaultnya adalah profil "lokal".

Di lingkungan kami yang lain, kami hanya akan mengatur variabel lingkungan 'SPRING_PROFILES_ACTIVE' di Tomcat.

Saya mendapatkan ini dari komentar yang ditemukan di sini: https://github.com/spring-projects/spring-boot/pull/592


6

Kemungkinan penyebabnya adalah Anda tidak mengirimkan parameter baris perintah ke metode utama aplikasi. Saya melakukan kesalahan yang sama beberapa minggu yang lalu.

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

Terima kasih atas balasan dan sarannya, namun saya meneruskan argumen.
dleerob

Ini sebenarnya memperbaiki masalah saya. Untuk beberapa alasan ketika saya membuat proyek menggunakan Gradle, itu tidak otomatis menghasilkan Applicationkelas saya begitu juga dengan tangan dari memori. Ketinggalan argslangkahnya, dan kotak "Profil Aktif" di konfigurasi run tidak berfungsi - saya harus masuk secara manual di -Dspring.profiles.activekotak opsi VM.
Xaero Degreaz

3

Saya menggunakan Intellij Community Edition. Buka "Run / Debug Configurations"> tab Runner> Variabel lingkungan> klik tombol "...". Tambahkan: SPRING_PROFILES_ACTIVE = lokal

spring.profiles.active


3

Untuk Spring Boot 2.1.0 dan yang lebih baru dapat Anda gunakan

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


2
Di baris perintah Anda akanspring-boot:run -Dspring-boot.run.profiles=local
Tn. K.

dengan spring-boot: jalankan ini jawabannya
kakabali

2

Dalam kasus saya, saya menggunakan konfigurasi di bawah ini pada opsi VM di IntelliJ, itu tidak memilih konfigurasi lokal tetapi setelah restart IntelliJitu mengambil rincian konfigurasi dari IntelliJdan layanan mulai berjalan.

-Dspring.profiles.active=local

0

Coba ini. Edit file build.gradle Anda seperti yang diikuti.

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


-3

Set di -Dspring.profiles.active=localbawah argumen program.


Saya telah menghapus tanda kutip dari pertanyaan saya di atas. Saya sebenarnya tidak menggunakan tanda kutip, saya hanya mencoba menunjukkan dengan tepat apa yang saya masukkan ke dalam bidang konfigurasi run
dleerob

5
maksud Anda opsi VM!
Michail Michailidis

Jawaban ini sangat menyesatkan karena argumen program tidak akan dikenali oleh aplikasi!
yuranos

Jawaban ini tidak akan berfungsi, seperti yang disebutkan oleh orang lain, harus di bawah Opsi VM di IntelliJ Idea dan tidak dalam argumen program
abstractKarshit
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.