Spring Boot – szybkie tworzenie aplikacji web w Javie

Stworzenie nawet prostej aplikacji w Javie zwykle bywa czasochłonne. Trzeba stworzyć dużo plików xml zawierających konfiguracje, która zazwyczaj jest taka sama lub bardzo podobna dla każdej aplikacji, następnie uruchamianie kontenera, deployowanie aplikacji i inne powtarzalne czynności. Jednak istnieje alternatywa!

Spring Boot

Projekt ten powstał aby ułatwić wszystkim start ze Springiem, eliminuje potrzebę zabawy z tworzeniem konfiguracji xml-owej, gotową aplikację można stworzyć i uruchomić za pomocą jednej klasy. Idealnie nadaje się do projektów studenckich i szybkiego prototypowania aplikacji. Jedyne wymagania jakie stawia przed użytkownikiem to znajomość Mavena.

Zaczynamy!

Na początku należy stworzyć projekt Mavenowy. Ustawiamy jako parenta artefakt springowy poprzez dodanie klauzuli do pom.xml:

Następnie jeżeli to ma być aplikacja webowa dodajemy odpowiednią zależność która powie Springowi, że chcemy stworzyć aplikację web:

Przy dodawaniu zależności nie podajemy już wersji, dzieje się tak dlatego, że wersje poszczególnych artefaktów wyspecyfikowane są w projekcie nadrzędnym zdefiniowanym jako parent. Cały pom.xml wygląda u mnie następująco:

Tworzymy właściwą aplikację

Po stworzeniu projektu, możemy przejść do kodowania aplikacji. Zaczynamy od stworzenia nowej klasy, ja zwykle z braku pomysłu nazywam ją Main. Gotowa klasa, która będzie obsługiwać zapytania z przeglądarki wygląda tak:

Jeśli teraz uruchomisz aplikację i przejdziesz w przeglądarce pod adres localhost:8080 ujrzysz Hello World!.

Przejdźmy teraz do szczegółów, zobaczmy co się dzieje w kodzie. Nasza klasa posiada 2 adnotacje:

  • @EnableAutoConfiguration z pakietu org.springframework.boot.autoconfigure – dzięki niej, aplikacja dokona samokonfiguracji według domyślnych wartości, załaduje potrzebne moduły itp.
  • @Controller z pakietu org.springframework.stereotype – dzięki temu aplikacja będzie wiedzieć, że nasza klasa obsługuje żądania HTTP.

Kolejnym elementem jest metoda main, taka zwykła która jest wywoływana na początku każdego programu. W niej uruchamiamy aplikacje za pomocą jednej linijki: SpringApplication.run(Main.class, args);. Podajemy w niej nazwę głównej klasy, czyli nasz main i argumenty linii poleceń.

Drugą metodą która znajduje się w klasie jest metoda mainPage ozdobiona 2 adnotacjami:

  • @RequestMapping(“/”) – Mówi aplikacji, że żądanie z przeglądarki o stronę “/”, czyli główną stronę będzie obsługiwała właśnie ta metoda.
  • @ResponseBody – Mówi aplikacji, że metoda zwróci ciało odpowiedzi, to co zostanie zwrócone przez metodę zostanie przesłane do przeglądarki, w tym konkretnym przypadku do przeglądarki zostanie wysłany String z napisem Hello World.

Oddzielenie kontrolera

W przypadku bardzo prostej aplikacji takie podejście się sprawdza, jednak mieszamy tutaj troszeczkę różne warstwy aplikacji. Aby kod był czytelniejszy powinniśmy wydzielić kod kontrolera do oddzielnej klasy. Dodajmy zatem kolejną klasę np. PageController i przenieśmy do niej wszystko co związane z kontrolerem:

Przy okazji dodajmy jeszcze jedną metodę która obsłuży inny adres tak aby sumarycznie wyglądało to tak:

Do klasy Main dodajemy adnotację @ComponenetScan, która mówi aby aplikacja przeszukiwała inne klasy w poszukiwaniu adnotacji takich jak @Controller. Jeśli nowa klasa jest w innym pakiecie należy podać ten pakiet w adnotacji przykładowo: @ComponentScan(basePackageClasses = PageController.class).

Klasa Main po zmianach:

Po uruchomieniu pod adresem http://localhost:8080 powinien nadal znajdować się napis Hello World! a pod adresem http://localhost:8080/hello napis Hi!

Kilka szczegółów technicznych dla zainteresowanych

W trakcie uruchamiania aplikacji, logi pokazują, że pod spodem uruchamia się Tomcat. Spring Boot uruchamia embedded Tomcata za nas i wgrywa tam aplikacje abyśmy sami mogli się skupić na tworzeniu kodu zamiast przejmowania się szczegółami technicznymi. Możemy do pom.xml dodać zależności do kontenera jetty aby zastąpić nim tomcata.

Nasza aplikacja dodatkowo może być wyeksportowana do pliku war tak aby można było ją uruchomić na zewnętrznym tomcacie, jednakże ciekawszą opcją jest stworzenie tak zwanego FatJar, czyli pliku jar z wszystkimi zależnościami i kontenerem, który możemy uruchomić przy pomocy polecenia: java -jar plik.jar. Aby tego dokonać trzeba dodać do pliku pom kilka wpisów:

Cały plik wygląda teraz tak:

Uruchomienie Mavenowego celu package spowoduje stworzenie pliku jar w katalogu target w naszym projekcie.

Więcej o tworzeniu poszczególnych plików znajduje się na stronie: http://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-maven-plugin.html.

Podsumowanie

Spring Boot pozwala tworzyć aplikacje pomijając cały narzut związany z tworzeniem konfiguracji xml. Bardzo szybko można zaprototypować w nim aplikacje. Aktualnie pokazałem jak zrobić prostą aplikację web, jednakże posiada on bardzo wiele komponentów m.in. zapewniających komunikację z bazami danych, pozwalające tworzyć kontrolery REST itp. W kolejnych postach postaram się przybliżyć kilka z nich.

2 thoughts on “Spring Boot – szybkie tworzenie aplikacji web w Javie”

  1. Wow! Spring Boot zaczyna mi się podobać! Zdecydowanie mniej pracy z konfiguracją i przede wszystkim mniej problemów w porównaniu do tego, co czasem “wyprawia” standardowy Spring.

    Kurs jest świetny. Wszystkie szczegóły opisane i to przejrzyście! Szata graficzna jest super – nie rozprasza wieloma kolorami czy reklamami jak w przypadku wielu tutoriali anglojęzycznych, a tekst przyjemnie się czyta.

    Będę tu wracać! 🙂

  2. Prosto, konkretnie, na temat. Jak przedmówczyni. Dodałem do zakładki ‘Ulubione’. Pozdrawiam i dziękuję.

Leave a Reply

Your email address will not be published. Required fields are marked *