Spring Boot - pierwsza aplikacja
2020-02-10 / Krzysztof Kozłowski

Spring (https://spring.io/) to popularna platforma do tworzenia aplikacji w Javie. Ułatwia i wyręcza programistę w wielu kwestiach, dzięki czemu programista skupić się może na tym, co aplikacja ma robić.

Przygotujemy prostą aplikację dodającą dwie liczby. Dane do obliczeń przekażemy programowi, wywołując odpowiedni adres w przeglądarce internetowej i także w przeglądarce zobaczymy wynik działania.

Spring to w rzeczywistości wiele podprojektów, z których każdy ma na celu realizację jakichś konkretnych zadań (np. obsługa żądań HTTP, komunikacja z bazami danych, przetwarzanie danych itd.).
Zamiast omawiać je wszystkie teoretycznie spróbujemy na przykładzie zobaczyć, jak przygotowuje się aplikację i jak ona działa w praktyce.

Spring Boot to jeden z podprojektów platformy Spring, z którego skorzystamy. Dzięki niemu aplikacja będzie miały zawarty w sobie serwer, umozliwiający jej uruchomienie. Nie potrzebne są więc żadne inne narzędzia, by nasz program uruchomić.
Spring Boot automatyzuje także konfigurację. Jeżeli nie potrzebujemy jakichś specjalnych ustawień, to domyślne ustawienia Spring Boot będą optymalne w zdecydowanej większości aplikacji. Brak konfiguracji to także szybkość przygotowania samej aplikacji.

Do dzieła

Do przygotowania szkieletu aplikacji skorzystamy z generatora dostępnego pod adresem https://start.spring.io/.
Dzięki niemu szybko i łatwo wygenerujemy projekt, który następnie otworzymy w środowisku programistycznym IntelliJ Idea.

Formularz podzielony został na kilka sekcji. Większości z nich nie modyfikujemy, bazując na zaproponowanych wartościach takich, jak. np. Maven Projekt, Language: Java. Jako wersję Spring Boot wybrano 2.2.4 która jest ostatnią stabilną wersją w chwili pisania tego artykułu.
W sekcji Project Metadata można opcjonalnie wprowadzić swoją nazwę aplikacji. W naszym przykładzie nazwa ta została zmieniona na spring-demo.
Sekcja Dependencies pozwala na określenie, z jakich bibliotek będzie korzystał nasz program. Wymagane biblioteki znajdujemy albo wpisując ich nazwy albo z listy po przełączeniu na drugą zakładkę.

Bibliotek i dodatkowych komponentów jest naprawdę sporo. Nasza aplikacja będzie bardzo prosta, skorzystamy więc tylko z dwóch z nich:

  • Lombok - dzięki której nasze klasy będą mogły być krótsze i prostsze. Używając Lomboka-a nie trzeba na przykład w klasie deklarować gettera i settera dla każdego z pól (pamiętać trzeba jedynie o konieczności doinstalowania wtyczki Lombok w Idei)
  • Spring Web - umożliwiająca stworzenie aplikacji webowej (czyli działającej w przeglądarce internetowej). Dodanie tej biblioteki spowoduje także wyposażenie aplikacji w wbudowany serwer Apache Tomcat, na którym działać będzie aplikacja i który będzie odpowiedzialny za przyjęcie żądania do przetwarzania.

Kliknięcie klawisza Generate spowoduje wygenerowanie aplikacji i pobranie archiwum ZIP.

Program - po rozpakowaniu z pliku ZIP - zapisujemy na dysku i w wierszu poleceń przechodzimy do katalogu, gdzie został on wypakowany.
Zacznijmy od skompilowania aplikacji, w czasie której Maven pobierze z Internetu ew. brakujące biblioteki. Program kompilujemy komendą:

1
mvn clean install

Jeśli udało się pobrać z sieci wszystkie potrzebne biblioteki i kompilacja zakończyła się poprawnie, powinniśmy zobaczyć komunikat BUILD SUCCESS

Hello world

Czas na dodanie swojej funkcji. Na początek celem będzie wyświetlenie napisu Hello world po wejściu na odpowiedni adres aplikacji.

Otwieramy projekt w Idei. Dodamy nowy kontroler, a w nim funkcję zwracającą String *”Hello world”*. Kontroler to specjalna klasa, dzięki której Spring wie, jak obsłużyć żądania HTTP i którą metodę kontrolera wywołać po wpisaniu w przeglądarce danego adresu.
Jest kilka typów kontrolerów. My dodamy tzw. kontroler REST, który oprócz zwracania prostych stringów będzie potrafił przyjąć i zwrócić kompletne obiekty dowolnych klas. Ale o tym innym razem.

W projekcie rozwijamy strukturę katalogów i na istniejącym pakiecie com.example klikamy prawym klawiszem myszy i wybieramy opcję New → Java class

Jako nazwę nowej klasy wpiszmy controller.MyController

Spowoduje to dodanie nowej klasy o nazwie MyController w nowo utworzonym pakiecie o nazwie controller. Oczywiście dodanie pakietu i dodanie klasy można wykonać w dwóch oddzielnych krokach, ale Idea umożliwia dodanie pakietu i klasy w nim w ramach jednej operacji.

Początkowo klasa jest pusta i wygląda tak:

1
2
3
4
package com.example.springdemo.controller;

public class MyController {
}

W pierwszej kolejności dodajemy anotację @RestController, by poinformować Spring-a, że klasa MyController jest kontrolerem, który będzie obłsugiwał żądania HTTP z przeglądarki:

1
2
3
4
5
6
7
package com.example.springdemo.controller;

import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {
}

Następnie dodajemy jedną metodę, zwracającą String:

1
2
3
4
5
6
7
8
9
10
11
12
13
package com.example.springdemo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

@GetMapping("/")
public String hello() {
return "Hello world";
}
}

Dodana metoda nazywa się hello(), ale jej nazwa nie jest istotna. Metodę nazwać możemy dowolnie, choć oczywiście wskazane, by nazwa odzwierciedlała to, co dana metoda robi.

Ważna jest natomiast anotacja @GetMapping, którą dodaliśmy nad metodą. Mówi ona Spring-owi, że metoda hello() zostanie wykonana, jeśli wywołanym adresem będzie adres główny aplikacji (stąd string *”/“* podany jako parametr anotacji GetMapping). GetMapping informuje także, że obsługuje żądania HTTP typu GET. Inne metody protokołu HTTP zobaczymy w akcji niebawem, na razie niech wystarczy taka informacja, że każde żądanie, które wykonamy przeglądarką internetową, wpisując w niej odpowiedni adres, zawsze będzie żądaniem typu GET.

Uruchomienie aplikacji

Aplikację spring-boot uruchamiamy następującą komendą:

1
mvn spring-boot:run

Po uruchomieniu aplikacji powinniśmy w konsoli zobaczyć napis Started SpringDemoApplication świadczący o tym, że aplikacja prawidłowo się uruchomiła. Powyżej można też zobaczyć port, na którym uruchomił się serwer aplikacji. Port ten będzie potrzebny do tego, by w przeglądarce wpisać prawidłowy adres aplikacji. Korzystamy z ustawień domyślnych Spring Boot, dlatego port ten to 8080. Istnieje oczywiście możliwość jego zmiany, gdyby okazało się, że jest już zajęty np. przez inną aplikację. Zasada jest taka, że na jednym porcie można uruchomić tylko jedną aplikację.

Aby zobaczyć działanie aplikacji, uruchamiamy przeglądarkę internetową i wchodzimy na adres http://localhost:8080.
localhost to adres naszego własnego komputera, na którym uruchomiliśmy przed chwilą aplikację.

W przeglądarce powinniśmy zobaczyć napis Hello world:

Jeśli chcielibyśmy zmienić adres, po wywołaniu którego wyświetli się napis z http://localhost:8080 na np. http://localhost:8080/hello, to wystarczy w anotacji @GetMapping zmienić adres wywołania metody na:

1
@GetMapping("/hello")
PermaLink: https://akademia.coderion.pl/2020/02/spring-demo/