
W poprzednim wpisie #3 Spring Boot 2 – Actuator poznaliśmy narzędzie Actuator. Jest to mechanizm, który dostarcza metryki oraz dodatkowe informacje na temat aplikacji. Out-of-the-box Actuator daje nam między innymi możliwość sprawdzenia metryk wirtualnej maszyny Javy czy statusu naszej aplikacji. Jednakże, czasem potrzebujemy dodać własny endpoint dostarczający dodatkowe informacje o naszej aplikacji. W tym wpisie opowiemy sobie, jak dodać taki własny endpoint.
Spring Boot 2
Spring Boot 2 nieznacznie zmodyfikował sposób dodawania nowych endpointów. W poprzedniej wersji frameworku należało zaimplementować odpowiedni interfejs. W najnowszej wersji do dodania nowego endpointu wykorzystywana jest adnotacja @Endpoint (lub jej warianty, takie jak @WebEndpoint):
1 |
|
W parametrze id określamy, pod jakim adresem dostępny będzie nowy endpoint. W naszym przypadku jest to adres /actuator/integrations. Dodatkowo, każdy dodany przez nas endpoint jest domyślnie włączony. Możemy to zmienić, używając klucza enableByDefault: @Endpoint(id = "integrations", enableByDefault = false).
Operacje CRUD
Po dodaniu nowego adresu, pora na dodanie funkcjonalności. W Spring Boot 2 oprócz rejestracji nowych adresów, zmienił się też sposób obsługi operacji CRUD. Spring Boot 2 dostarcza nam trzy nowe adnotacje do mapowania operacji HTTP:
@ReadOperation- odczyt wartości przy wykorzystaniu metody GET.@WriteOperation- zapis wartości przy wykorzystaniu metody POST.@DeleteOperation- usunięcie wartości przy wykorzystaniu metody DELETE.
Spróbujmy zaimplementować klasę, która pozwala dodawać, usuwać oraz odczytywać wykorzystane integracje w naszej aplikacji:
1 |
|
W powyższej klasie pojawiła się także adnotacja @Selector, która mapuje klucz przekazanej wartości z części ścieżki URL.
Extension
Czasami, oprócz podstawowej funkcjonalności endpointów, chcielibyśmy mieć wpływ na zwracane nagłówki lub kody statusów. Jest to możliwe dzięki adnotacji @EndpointWebExtension(endpoint = IntegrationsEndpoint.class). Adnotacja ta pod kluczem endpoint przyjmuje nazwę klasy endpointu, któremu chcemy dodać dodatkową funkcjonalność:
1 |
|
Github
Całość jak zawsze na GitHubie.