Tworzenie nowoczesnych aplikacji webowych w Javie stało się o wiele łatwiejsze dzięki frameworkowi Spring Boot. Pozwala on na szybkie tworzenie aplikacji gotowych do produkcji, bez konieczności ręcznej konfiguracji wielu elementów. W tym artykule przyjrzymy się najważniejszym aspektom pracy ze Spring Boot, aby w 30 minut stworzyć działającą aplikację internetową.
Podstawy Spring Boot
Instalacja i konfiguracja
Aby rozpocząć pracę ze Spring Boot, należy zainstalować środowisko uruchomieniowe Java oraz narzędzie build Maven lub Gradle. Spring Boot działa na Java 8 lub nowszej. Po zainstalowaniu JDK i narzędzi build, można utworzyć nowy projekt np. przez https://start.spring.io. Wygeneruje on automatycznie podstawową strukturę projektu z konfiguracją. Można też dodać zależności do bibliotek Spring Boot potrzebnych w projekcie. Dzięki temu oszczędzamy czas na ręcznej konfiguracji.
Struktura projektu Spring Boot
Typowy projekt Spring Boot zawiera klasę początkową z adnotacją @SpringBootApplication, kontrolery RESTowe, komponenty beans do injekcji zależności, konfigurację w plikach .properties oraz testy jednostkowe. Ważne elementy to też pliki zasobów aplikacji takie jak widoki, arkusze stylów, skrypty itp. Dzięki konwencjom nazewnictwa i automatycznej konfiguracji, Spring Boot samodzielnie skanuje klasy w poszukiwaniu komponentów aplikacji.
Zależności i zarządzanie pakietami
Spring Boot korzysta z Mavena lub Gradle do zarządzania zależnościami. Umożliwia to łatwe dodawanie bibliotek poprzez modyfikację pliku konfiguracji build. Narzędzia te integrują się z repozytoriami pakietów online dostarczając automatycznie potrzebne zależności. Zmniejsza to pracochłonność konfiguracji projektu.
Tworzenie aplikacji webowej
Kontrolery i ścieżki
Kontrolery REST w Spring Boot oznaczamy adnotacją @RestController. Mapują one żądania HTTP na metody kontrolerów za pomocą adnotacji @RequestMapping. Można definiować ścieżki, metody HTTP, konsumowane i produkowane typy danych. Kontrolery pobierają dane wejściowe i zwracają dane wyjściowe np. w formacie JSON.
Widoki i szablony
Do generowania widoków w Spring Boot stosujemy silniki szablonów takie jak Thymeleaf, FreeMarker czy Mustache. Pozwalają one na oddzielenie warstwy prezentacji od logiki aplikacji. Widoki są renderowane na podstawie modelu przekazanego z kontrolera. Można w nich używać tagów, fragmentów, layout'ów itp. ułatwiających tworzenie szablonów.
Obsługa błędów i wyjątków
Spring Boot pozwala na globalną obsługę błędów poprzez adnotację @ControllerAdvice. Można w niej zdefiniować metody obsługujące różne klasy wyjątków i zwracające odpowiednie kody HTTP wraz z treścią błędu. Ułatwia to centralne zarządzanie błędami bez rozpraszania logiki w kontrolerach.
Czytaj więcej: Jak zapobiegać wyciekom pamięci w Javie? Poradnik
Dostęp do danych
Konfiguracja bazy danych
Spring Boot automatyzuje konfigurację dostępu do baz danych poprzez plik application.properties, w którym definiujemy parametry połączenia, użytkownika, hasło itp. Sam oczywiście wybór bazy danych zależy od wymagań - najpopularniejsze to MySQL, Postgres czy H2.
Mapowanie obiektowo-relacyjne z JPA
Biblioteka JPA umożliwia mapowanie klas na tabelki bazy danych za pomocą adnotacji @Entity, @Table, @Id itp. Definiujemy encje odpowiadające tabelom, pola odpowiadające kolumnom i relacje między nimi. Za zapis i odczyt odpowiedzialne są repozytoria dziedziczące z JpaRepository.
Zapytania i transakcje
Repozytoria JPA pozwalają na tworzenie zapytań SQL poprzez metody takie jak findAll, findOne, count, delete itp. Można też pisać natywne zapytania SQL lub używać QueryDSL. Transakcje inicjujemy adnotacją @Transactional nad metodami serwisów, co gwarantuje atomowość i spójność operacji bazodanowych.
Testowanie aplikacji

Testy jednostkowe
Testy jednostkowe weryfikują poprawność działania pojedynczych klas i metod, np. serwisów czy komponentów Spring Boot. Piszemy je używając JUnit i Mockito, aby podstawiać atrapы zależności. Pozwalają wykryć błędy na wczesnym etapie rozwoju aplikacji.
Testy integracyjne
Testy integracyjne sprawdzają współdziałanie różnych komponentów aplikacji, np. kontrolerów, serwisów, repozytoriów. Uruchamiamy w nich projekt Spring Boot w trybie testowym i wstrzykujemy mocki lub testową bazę danych. Pozwalają to na testowanie end-to-end przepływów w aplikacji.
Testowanie kontrolerów
Kontrolery testujemy pisząc testy integracyjne, które wysyłają żądania HTTP do endpointów REST i weryfikują poprawność odpowiedzi. Sprawdzamy statusy HTTP, wartości zwracane w body, nagłówki itp. Pozwala to potwierdzić, że kontrolery poprawnie obsługują żądania.
Bezpieczeństwo
Uwierzytelnianie użytkowników
Spring Security udostępnia kompleksowe wsparcie dla uwierzytelniania i autoryzacji. Można zintegrować różne mechanizmy (LDAP, OAuth, OpenID Connect, BASIC auth itp.) lub użyć wbudowanej obsługi użytkowników w pamięci lub bazie danych. Pozwala to dodawać funkcje logowania zgodnie z wymaganiami.
Autoryzacja i role użytkowników
Po uwierzytelnieniu możemy autoryzować dostęp do zasobów w oparciu o role użytkowników. Definiujemy je w adnotacjach @Secured/@RolesAllowed nad metodami kontrolerów i serwisów. Preautoryzacja sprawdza dostęp przed wykonaniem metod. Zapewnia to bezpieczny dostęp zgodny z uprawnieniami.
Konfiguracja zabezpieczeń
Spring Security posiada rozbudowane opcje konfiguracyjne, np. ochronę przed atakami CSRF i XSS, ochronę przed clickjackingiem, filtry bezpieczeństwa, szyfrowanie haseł. Można też dodać własne filtry. Dzięki temu skutecznie chronimy aplikację webową przed zagrożeniami.
Wdrażanie aplikacji
Profile Spring Boot
Profile w Spring Boot pozwalają na uruchamianie aplikacji w różnych trybach, np. dev, test, prod. Aktywujemy wybrane profile poprzez właściwości aplikacji lub linię poleceń. Można dedykować konfiguracje i beansy dla konkretnych profili, co ułatwia wdrażanie w zależności od środowiska.
Docker i konteneryzacja
Aplikacje Spring Boot można łatwo spakować w kontener Docker, co ułatwia ich uruchamianie w izolowanym środowisku. Wystarczy zbudować obraz Dockera z aplikacją, który następnie można wdrożyć na dowolną platformę obsługującą konteneryzację np. Kubernetes.
Wdrażanie w chmurze
Chmura staje się coraz popularniejsza jako środowisko hostingu aplikacji Java. Spring Boot umożliwia wdrożenie w chmurze, np. na AWS, Azure czy Google Cloud. Można integrować usługi chmurowe jak bazy danych, kolejki czy storage bez zmian w kodzie aplikacji.