Profile w Spring Boot

Profile w Spring Boot

Profilowanie to mechanizm, który na podstawie jednej wersji kodu źródłowego aplikacji umożliwia tworzyć jej różne wersje. Główna konfiguracja zawarta jest w pliku application.properties. Przejdźmy do testowania profili. Utwórzmy nowy projekt Spring Boota gdzie w katalogu ./resources powinny znaleźć się oprócz application.properties dodatkowe pliki:

application.properties:

spring.profiles.active = dev
server.port = 8081
spring.application.name = master profile

application-dev.properties:

spring.application.name = dev profile

oraz:

application-prod.properties:

spring.application.name = prod profile

W głównym pliku – application.properties zamieszczamy informacje o tym który profil jest aktywny. Wartości które są wpisane w tym profilu są obowiązujące, ale jeśli zostaną nadpisane w innym profilu który jest obecnie aktywny to nie mają zastosowania. Oznacza to, że nadpisane wartości w aktualnie aktywnym profilu mają pierwszeństwo.

Utwórzmy kontroler typu REST do testów:

@RestController
public class RestControllerProfileTest {
 
    @Value("${spring.application.name}")
    private String appName;
 
    @GetMapping("/app")
    public String getInjectedValue() {
        return appName;
    }
}

Aplikacja startuje na porcie 8081:

2019-10-09 11:49:36.651  INFO 1280 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8081 (http)

Wynik po wejściu na adres:

http://localhost:8081/app

to:

dev profile

Drugą opcją na ustawienie profilu który ma być obecnie aktywny jest dodanie tej informacji:

-Dspring.profiles.active=dev

do parametrów maszyny wirtualnej. Z poziomu Intellij Idea robimy to w następujący sposób:

Jeśli są ustawione dwie opcje czyli jest dodany parametr do VM z poziomu Intellij Idea oraz w pliku application.properties jest wpis który ustawia aktywny profil to priorytet ma parametr dodany do VM.

Zobacz kod na GitHubie i zapisz się na bezpłatny newsletter!

.

Zobacz też film na YouTube!

Leave a comment

Your email address will not be published.


*