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?
źródło
Odpowiedzi:
Dodałem
-Dspring.profiles.active=test
do opcji VM, a następnie ponownie uruchomiłem tę konfigurację. Działało idealnie.Można to ustawić za pomocą
Run | Edit Configurations...
Configuration
zakładkiEnvironment
sekcję, aby wyświetlićVM options
źródło
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”.
źródło
args
w swoimApplication.main()
np.SpringApplication.run( Application.class, args );
Spróbuj dodać to polecenie do pliku build.gradle
Więc do uruchomienia skonfiguruj ten kształt:
źródło
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.RELEASE
iSpring v5.0.7.RELEASE
, ale nie z innym projektem zSpring Boot v2.1.1.RELEASE
iSpring v5.1.3.RELEASE
.Ponadto podczas pracy z Maven lub JAR ludzie wspominali o tym:
lub
(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
źródło
SPRING_PROFILES_ACTIVE
.~/.profile
lub podobnego, musisz użyćSPRING_PROFILES_ACTIVE
-spring.profiles.active
prawdopodobnie działa tylko jako argument w wierszu poleceń.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
źródło
W przypadku Spring Boot 2.1.0 i nowszych możesz użyć
mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar
źródło
spring-boot:run -Dspring-boot.run.profiles=local
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); }
źródło
Application
klasy, więc robiłem to ręcznie z pamięci. Pominąłem tenargs
krok, więc pole „Aktywne profile” w konfiguracji uruchamiania nie działało - musiałem ręcznie podać w-Dspring.profiles.active
polu opcji maszyny wirtualnej.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
źródło
W moim przypadku użyłem poniższej konfiguracji w opcjach VM w
IntelliJ
, nie wybierałem konfiguracji lokalnych, ale po ponownym uruchomieniuIntelliJ
wybrałem szczegóły konfiguracjiIntelliJ
i usługa zaczęła działać.-Dspring.profiles.active=local
źródło
Spróbuj tego. Edytuj plik build.gradle w następujący sposób.
ext { profile = project.hasProperty('profile') ? project['profile'] : 'local' }
źródło
Możesz wypróbować powyższy sposób, aby aktywować profil
źródło
Ustaw
-Dspring.profiles.active=local
pod argumentami programu.źródło