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.