Wszystko wskazuje na to, że już w listopadzie bieżącego roku można spodziewać się Springa 6 i Spring Boot-a 3!
Formalnie zostaną one zaprezentowane na wydarzeniu
Spring One, które odbędzie się 6-8 grudnia w San Francisco.
W najnowszej wersji frameworków szczególną uwagę poświęcono dwóm nadrzędnym tematom: natywnym plikom wykonywalnym i obserwowalności (
observability).
Spring Framework wprowadza w tym celu podstawowe abstrakcje, a projekty z jego portfolio, w tym Spring Boot, konsekwentnie się z nimi integrują.
Część rozwiązań opisywaliśmy już kilka miesięcy temu w artykule
Spring Framework 6 - Pierwszy raport!
Dziś przyjrzymy się kolejnym nowościom. Zaczynamy od inicjatywy
observability.
Obserwowalność
Wraz z nowym Springiem powstała inicjatywa obserwacji i rejestracji,
która zakończyła się stworzeniem nowego interfejsu API
Micrometer Observation
oraz migracją poprzedniego projektu
Spring Cloud Sleuth do
Micrometer Tracing.
Rozwiązanie to służy do wydajnego rejestrowania metryk aplikacji za pomocą
Micrometer Tracing
i wdrażania śledzenia za pośrednictwem dostawców, takich jak
OpenZipkin lub
OpenTelemetry.
Appa Notka.
Zipkin to rozproszony system śledzenia. Pomaga gromadzić dane w czasie
potrzebne do rozwiązywania problemów z opóźnieniami w ramach realizacji usług.
Funkcje obejmują zarówno zbieranie, jak i wyszukiwanie tych danych.
Posiadając identyfikator śledzenia w pliku dziennika, możemy przejść bezpośrednio do tego dziennika.
Możemy również wysyłać zapytania na podstawie atrybutów, takich jak usługa, nazwa operacji, tagi i czas trwania.
OpenTelemetry
to zbiór narzędzi, interfejsów API i zestawów SDK służacych do instrumentowania, generowania, zbierania i eksportowania danych telemetrycznych (metryki, dzienniki i ślady).
Nowe interfejsy HTTP
Tutaj należałoby rzec...no wreszcie! Wreszcie dostajemy coś wygodnego w komunikacji po HTTP,
gdy z poziomu kodu chcemy wysłać request do innej usługi. Do tej pory nagminnie używaliśmy
RestTemplate
(pomijam kwestię rejestracji usług w Eurece i tzw.
FeignClient),
ale to, jak sami przyznacie, nie było do końca komfortowe rozwiązanie.
Spring Framework w wersji 6 wraz ze Spring Boot w wersji 3 wprowadza możliwość korzystania
z API HTTP w sposób deklaratywny przy użyciu interfejsów. Ta funkcja przypomina sposób
pisania repozytoriów Spring Data, gdzie po prostu tworzymy interfejs i deklarujemy,
jakie metody powinien on posiadać, a Spring Data utworzy proxy, implementując wszystkie zapytania SQL.
Metody interfejsu opisujemy za pomocą ogólnej adnotacji
@HttpExchange
lub adnotacji dedykowanych do konkretnych metod HTTP, np.
@GetExchange:
Takie rozwiązanie zadziała, o ile wcześniej stworzymy beana usługi:
Samo wywołanie jest banalnie proste. Wystarczy wstrzyknąć
personService
tam, gdzie chcemy go użyć, a następnie...wybrać metodę:
AOT i natywne pliki wykonywalne
Inicjatywa
Spring Native przenosi się do właściwego projektu Springa.
Rozwiązanie zapewnia obsługę kompilacji aplikacji Spring do natywnych plików wykonywalnych przy użyciu kompilatora obrazów natywnych
GraalVM.
Projekt jest dedykowany Spring 5 i Spring Boot 2, natomiast Spring Boot 3 i Spring Framework 6 będą miały wbudowaną obsługę natywnej Javy.
Obrazy natywne zapewniają różne korzyści, takie jak natychmiastowe uruchamianie i mniejsze zużycie pamięci.
Tak więc warto rozważyć, czy nie zbudować natywnego obrazu naszej aplikacji Java.
Appa Notka.
Ahead-Of-Time Processing, czyli AOT, to w skrócie przetwarzanie kontekstu aplikacji z wyprzedzeniem, co pozwala na zoptymalizowanie aplikacji.
W zależności od kontekstu możemy zmniejszyć ilość dostarczanej infrastruktury oraz
wstępnie oszacować funkcje, które zadeklarowaliśmy w swoich komponentach.
Prowadzi to do szybszego uruchamiania aplikacji. Możemy także zidentyfikować rzeczy,
które są być problematyczne w limitowanych środowiskach, przez co możemy zapewnić im właściwą alternatywę.
Kiedy typowa aplikacja Springa działa, kontekst aplikacji wywołuje szereg postprocesorów,
które przygotowują fabrykę beanów: parsowanie klas konfiguracyjnych, skanowanie ścieżek klas i inne,
które ostatecznie mogą wyzwolić rozwiązania automatycznej konfiguracji.
Po uruchomieniu w większości przypadków nie są one już potrzebne w czasie wykonywania.
W dobrze zdefiniowanym środowisku (ścieżka klas itp.) można to zrobić w całości w czasie kompilacji,
tak aby tylko odpowiednie definicje beanów, dla bieżącego środowiska,
były wprowadzane do fabryki beanów. Postprocesory, które zostały uruchomione w czasie kompilacji,
są odrzucane i zastępowane kodem, który dostarczyły.
Java Platform Module System
JPMS, czyli
Java Platform Module System pozwala podzielić kod Java na komponenty (moduły)
na poziomie wyższym niż podział pakietowy. Moduł jest grupą powiązanych pakietów i zasobów o
unikalnej nazwie. Posiada on deskryptor definiujący między innymi zależności do innych modułów.
W przypadku Springa 5 jary są deklarowane jako automatyczne moduły. W Springu 6 planowane jest wykorzystanie
pliku deskryptora, co pozwoli na konfigurowanie zależności między modułami frameworka.
Obsługa standardu RFC7807
Jedną z ważniejszych nowych funkcji jest
obsługa standardu RFC7807 (Problem Details Standard).
Nie będzie potrzeby dołączania osobnych bibliotek, takich jak
Zalando Problem.
Dołącz do grupy, w której znajdziesz ciekawe posty oraz poznasz odpowiedzi na swoje pytania!
-
Regularnie publikowane posty dotyczące, Springa i Hibernate'a oraz samej Javy.
-
Możliwość zadawania pytań osobom tworzącym społeczność budowaną
wokół tych samych zainteresowań
-
Bezpośredni kontakt z autorem portalu i kursów Javappa!
-
Wymiana doświadczeń między członkami grupy
-
Przyjazna atmosfera w zamkniętej grupie
Appa Notka.
Zajrzyj do naszego Kursu Aplikacji Web - Mega pakiet.
Pierwszy w polskim internecie tak rozbudowany kurs tworzenia aplikacji webowej w Springu na podstawie
gotowej aplikacji, którą ściągniesz na swój komputer.
Implementacja krok po kroku, drogowskazy do miejsc, w których uzupełnisz wiedzę
teoretyczną, a także inne pomocne rozwiązania.
Podsumowanie
Kolejna wersja Springa zapowiada się ciekawie. Poza wspomnianymi tu nowościami nie należy zapominać o tym, co już było
przedstawiane wcześniej, a więc użycie
Jakarty EE oraz oparcie kodu a Javę 17.
Tak więc sumarycznie liczba kluczowych zmian jest spora, ale nie jest to rewolucja i wygląda na to,
że nowa wersja będzie w miarę prosta do zaadaptowania w większości projektów.
Autor: Jarek Klimas
Data: 04 października 2022
Labele:Backend, Poziom średniozaawansowany, Java
Linki
Spring Cloud Sleuth
Micrometer Tracing
Zipkin
OpenTelemetry
Spring Native
Obsługa standardu RFC7807
Zalando Problem
Masz pytanie odnośnie zagadnienia omawianego w artykule?
Coś, co napisaliśmy, nie zaspokoiło Twojego głodu wiedzy?

Daj nam znać co myślisz i skomentuj artykuł na facebooku!