Jak aktywować profil Spring Boot podczas uruchamiania z IntelliJ?


144

Mam 5 środowisk:

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

Chcę, aby dla każdego środowiska były używane różne właściwości aplikacji, więc mam następujące pliki właściwości, z których każdy ma inny adres URL dla źródła danych:

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

Używam IntelliJ i uruchamiam moją aplikację za pomocą bootRun we wtyczce Gradle na moim komputerze lokalnym. Będę używał wdrażania tego samego pliku wojennego aplikacji we wszystkich innych środowiskach, w których działa Tomcat.

Próbowałem dodać:

--spring.profiles.active = local

do konfiguracji uruchamiania w parametrach skryptu.

Próbowałem dodać

-Dspring.profiles.active = local

do konfiguracji uruchamiania w opcjach maszyny wirtualnej.

Żadna praca. Ciągle widzę komunikat INFO podczas uruchamiania, mówiący: Brak aktywnego profilu, powrót do profili domyślnych: domyślny

Jeśli uruchomię moją aplikację z wiersza poleceń systemu Windows przy użyciu

gradle bootRun

ale najpierw ustawiłem zmienną środowiskową

set SPRING_PROFILES_ACTIVE=local

Wtedy wszystko działa.

Moje pytanie brzmi: jak aktywować lokalny profil rozruchu sprężynowego podczas uruchamiania programu BootRun z IntelliJ?


1
Dlaczego uruchamiasz tam aplikację przez gradle? Czy nie byłoby 10 razy wygodniej użyć konfiguracji uruchamiania? Jest pole, w którym możesz ustawić profile, aby włączyć ...
Stephane Nicoll,

Używam konfiguracji uruchamiania w IntelliJ, jak wyjaśniono powyżej. To nie działa.
dleerob

2
Nie, nie jesteś. To, o czym mówię, to „Konfiguracja Spring Boot run” Run -> Edit configuration> New> Spring Boot.
Stephane Nicoll

Tak, odszedłem od konfiguracji uruchamiania Spring Boot, ponieważ potrzebowałem rozszerzyć project.properties do application.properties w moim build.gradle i jeśli użyłem konfiguracji Spring Boot run, to nie działało.
Zajmę

1
Korzystanie z konfiguracji Spring Boot wydaje się bardziej kłopotliwe niż warte. `` Make '' po prostu kopiuje zasoby i nie filtruje / nie zmienia ich zgodnie ze skryptem kompilacji. Następnie powiedzenie mu, aby uruchomił 'build' z gradle zamiast 'make', po prostu powoduje zawieszenie się przebiegu. Jeśli zamiast tego użyję bootRun, wraz z wpisem środowiska zgodnie z poniższą odpowiedzią, wszystko działa dobrze.
dleerob

Odpowiedzi:


221

Dodałem -Dspring.profiles.active=testdo opcji VM, a następnie ponownie uruchomiłem tę konfigurację. Działało idealnie.

Można to ustawić za pomocą

  • Wybieranie Run | Edit Configurations...
  • Przejdź do Configurationzakładki
  • Rozwiń Environmentsekcję, aby wyświetlićVM options

Utknąłem w tej samej sytuacji, ale w przypadku projektu Maven. Dzięki za pomoc. Ustawiliśmy opcję VM dla każdego pliku testowego.
Sri9911

2
Na mnie też nie działa. Używam gradle i dwóch modułów (api i ui)
Virkom

1
U mnie też nie działa, również tutaj używam gradle.
IARI

Cześć, mam ten sam problem, ale ta poprawka go nie rozwiązuje. co ma tu na myśli, mówiąc o ponownej konfiguracji? czy jest to tak samo, jak ponowne uruchomienie zadania?
user1456110

Uruchomiłem ten konkretny test po edycji, jak pokazano.
Thom,

89

Jeśli faktycznie korzystasz z konfiguracji rozruchu sprężynowego (obecnie obsługiwanych tylko w wersji Ultimate Edition), możesz łatwo wstępnie skonfigurować profile w ustawieniu „Aktywne profile”.

wprowadź opis obrazu tutaj


1
Dzięki, jestem pewien, że to zadziała, jednak nie używam konfiguracji uruchamiania Spring Boot, używam konfiguracji uruchamiania Gradle, która nie ma pola „Aktywne profile”. Moja kompilacja gradle filtruje i modyfikuje niektóre pliki właściwości, które kopiuje do katalogu kompilacji, więc używam do tego konfiguracji uruchamiania klasy.
dleerob

Jak wskazała powyżej odpowiedź: jeśli to nie działa dla Ciebie, upewnij się, że przechodzisz argsw swoim Application.main()np.SpringApplication.run( Application.class, args );
Xaero Degreaz

Ta funkcja jest obsługiwana tylko w wersji Ultimate.
Julien Malige

Dzięki @JulienMalige za wskazanie tego. Zmienię odpowiedź.
Daniel Bubenheim

14

Spróbuj dodać to polecenie do pliku build.gradle

wprowadź opis obrazu tutaj

Więc do uruchomienia skonfiguruj ten kształt:

wprowadź opis obrazu tutaj


13

Wygląda na to, że Spring Boot zmienił sposób odczytywania opcji VM w miarę ewolucji. Oto kilka sposobów na wypróbowanie, gdy uruchamiasz aplikację w Intellij i chcesz aktywować jakiś profil:

1. Zmień opcje maszyny wirtualnej

Otwórz „Edytuj konfigurację” w „Uruchom” i w „Opcjach maszyny wirtualnej” dodaj: -Dspring.profiles.active=local

W rzeczywistości działa z jednym moim projektem z Spring Boot v2.0.3.RELEASEi Spring v5.0.7.RELEASE, ale nie z innym projektem z Spring Boot v2.1.1.RELEASEi Spring v5.1.3.RELEASE.

Ponadto podczas pracy z Maven lub JAR ludzie wspominali o tym:

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

lub

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

(Zobacz tutaj: jak używać profili Spring Boot )

2. Przekazywanie argumentów JVM

Gdzieś wspomniano, że Spring zmienia sposób uruchamiania procesu aplikacji, jeśli określisz jakieś opcje JVM; forsuje inny proces i nie przekazuje otrzymanego argumentu, więc to nie działa. Jedynym sposobem na przekazanie do niego argumentów jest:

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

Ponownie, to jest dla Mavena. https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-debug.html

3. Ustawienie (aplikacja) env var

W przypadku drugiego projektu zadziałało ustawienie zmiennej środowiskowej, jak wspomniano w odpowiedzi powyżej: „Edytuj konfigurację” - „Zmienna środowiskowa” oraz:

SPRING_PROFILES_ACTIVE=local

2
W rzeczywistości zmienna env powinna być SPRING_PROFILES_ACTIVE.
Josh M.

Dodałem go w "Run configuration" w IDEA "VM options" jak "spring.profiles.active" i działa. Może inna forma, taka jak urs, jest używana w całym systemie we właściwościach systemu?
WesternGun

Jeśli dodajesz go do ~/.profilelub podobnego, musisz użyć SPRING_PROFILES_ACTIVE- spring.profiles.activeprawdopodobnie działa tylko jako argument w wierszu poleceń.
Josh M.

1
Ach .. więc masz na myśli to samo, co podejrzewałem; rzeczywiste środowisko systemowe, a nie tylko środowisko aplikacji. OK, edytuję.
WesternGun

Ta odpowiedź jest bardzo zwięzła i kompletna
BXL

8

Skończyło się na dodaniu następujących elementów do mojego build.gradle:

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

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

Więc teraz, gdy uruchamiasz bootRun z IntelliJ, domyślnie jest to profil „lokalny”.

W innych naszych środowiskach po prostu ustawimy zmienną środowiskową „SPRING_PROFILES_ACTIVE” w Tomcat.

Mam to z komentarza znajdującego się tutaj: https://github.com/spring-projects/spring-boot/pull/592


7

W przypadku Spring Boot 2.1.0 i nowszych możesz użyć

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


2
W twojej linii poleceń będziespring-boot:run -Dspring-boot.run.profiles=local
Mr. K.

z butem sprężynowym: biegnij to jest odpowiedź
kakabali

-Dspring-boot.run.profiles działało.
harshit2811

6

Prawdopodobną przyczyną może być nieprzekazywanie parametrów wiersza polecenia do głównej metody aplikacji. Popełniłem ten sam błąd kilka tygodni temu.

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

Dziękuję za odpowiedź i sugestię, jednak
przekażę

To faktycznie rozwiązało mój problem. Z jakiegoś powodu, kiedy tworzyłem projekt za pomocą Gradle, nie generował on automatycznie mojej Applicationklasy, więc robiłem to ręcznie z pamięci. Pominąłem ten argskrok, więc pole „Aktywne profile” w konfiguracji uruchamiania nie działało - musiałem ręcznie podać w -Dspring.profiles.activepolu opcji maszyny wirtualnej.
Xaero Degreaz

3

Używam Intellij Community Edition. Przejdź do „Konfiguracje uruchamiania / debugowania”> zakładka Runner> Zmienne środowiskowe> kliknij przycisk „...”. Dodaj: SPRING_PROFILES_ACTIVE = local

spring.profiles.active


2

W moim przypadku użyłem poniższej konfiguracji w opcjach VM w IntelliJ, nie wybierałem konfiguracji lokalnych, ale po ponownym uruchomieniu IntelliJwybrałem szczegóły konfiguracji IntelliJi usługa zaczęła działać.

-Dspring.profiles.active=local

0

Spróbuj tego. Edytuj plik build.gradle w następujący sposób.

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


-4

Ustaw -Dspring.profiles.active=localpod argumentami programu.


Usunąłem cytaty z mojego pytania powyżej. W rzeczywistości nie używam cudzysłowów, po prostu starałem się dokładnie pokazać, co umieszczam w polach konfiguracji uruchamiania
dleerob

5
masz na myśli opcje VM!
Michail Michailidis

Ta odpowiedź jest bardzo myląca, ponieważ argumenty programu nie zostaną rozpoznane przez aplikację!
yuranos

Ta odpowiedź nie zadziała, jak wspominali inni ludzie, powinna znajdować się w opcjach VM w IntelliJ Idea, a nie w argumentach programu
abstractKarshit,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.