Profilowanie polega na powoływaniu wielu wersji instancji tworzonej aplikacji.
Przykładowo możliwe jest stworzenie na bazie jednego kodu źródłowego aplikacji, która będzie miała profil np. developerski umożliwiający na łączenie się i operowanie z bazą danych H2, oraz profil produkcyjny, gdzie aplikacja będzie wykorzystywała bazę danych PostgreSQL.
Oczywiście możliwości profili idą dużo dalej. Oprócz zarządzania konfiguracją może jest również sterowanie przepływem działania aplikacji (kodu) w zależności od uruchomionego profilu – ten mechanizm zostanie opisany w następnym artykule tej serii.
Przykład
Aby stworzyć profil konfiguracyjny należy utworzyć plik z odpowiednim zarostkiem. Kwestia doboru zarostku należy do programisty. W momencie generowania nowego projektu dostępny jest profil ogólny. Można to zmienić dokonując modyfikacji pliku konfiguracyjnego z application.properties na application-dev.properties i application-prod.properties. Wówczas zostaną utworzone dwa profile dev i prod. Oba mogą mieć różną konfiguracje np.
application-dev.properties:
spring.datasource.url=jdbc:h2:file:./databaseDev spring.h2.console.enabled=true spring.h2.console.path=/console server.port=8081
application-prod.properties:
spring.datasource.url=jdbc:h2:file:./databaseProd spring.h2.console.enabled=true spring.h2.console.path=/console server.port=8082
Teraz w zależności od uruchomionego profilu zostanie utworzona instancja dev lub instancja prod. Różnią się między sobą wykorzystywaną bazą danych, oraz uruchamiają się na różnych portach.
Uruchomienie
Jeśli aplikacja zostanie uruchomiona w standardowy sposobów, to działanie takie zakończy się błędem jeśli nie pozostawiliśmy profilu ogólnego (z plikiem application.properties).
Dlatego ważne jest podanie dodatkowej flagi z informacją, który profil ma zostać uruchomiony. Np.:
spring.profiles.active=dev
Możliwe jest to wywołanie z poziomu parametrów przekazywanych w VM options, wówczas trzeba podać przedrostek -D:
-Dspring.profiles.active=dev
Podsumowanie
Profilowanie to silne narzędzie, które na podstawie jednej wersji kodu umożliwia tworzyć różne wersje aplikacji. W tym artykule została opisana możliwość zarządzania aplikacją w zależności od konfiguracji i tym samym wytworzenia wersji developerskiej i produkcyjnej.
Możliwe jest również tworzenie wersji aplikacji podzielonej na funkcjonalności np. aplikacja w wersji freemium/optimum/premium – gdzie w zależności od zakupionej przez klienta wersji aplikacji dostarczamy mu tylko te funkcjonalności, za które zapłacił. Przykład ten zostanie opisany w następnej części.
Jeśli decydujemy się na zmianę konfiguracji w zależności od instancji to warto zmieniać porty oraz customizować baner. Zapobiegnie to dużej ilości wpadek jakie często powstają przy produkcji oprogramowania. Tak, aby developer nie pomyślał „To ja działałem na produkcji!? Myślałem, że działam na instancji developerskiej” 😀