niedziela, 17 maja 2015

Spring Boot 1 - tworzymy prostą aplikację

Cześć,
w tym i w kilku kolejnych postach chciałbym przybliżyć Wam kilka rzeczy związanych z tworzeniem aplikacji we frameworku Spring Boot. Dzisiaj zbudujemy prostą aplikację opartą na Spring Boot. Ale najpierw...

A co to ten Spring Boot?

Spring był i jest bardzo często wykorzystywanym frameworkiem do tworzenia aplikacji webowych. Aplikacje webowe mają to do siebie, że muszą działać w środowisku jakiegoś serwera (kontenera) - a więc chociażby takiego tomcata. Dlatego, jeśli stworzymy aplikację w Springu, aby ją uruchomić, musimy wdrożyć ją na takowy serwer. Konieczność uzależniania się od dodatkowej aplikacji może niektórym się nie spodobać. Powstała więc alternatywa: Spring Boot. Co to robi? Pozwala stworzyć aplikację springową, która zachowuje się jak samodzielna (standalone) aplikacja - można spakować ją do pliku .jar i uruchomić na dowolnym komputerze z JRE (Java Runtime Environment). Uruchomienie naszej aplikacji jest więc tak proste:
java -jar mojaAplikacja.jar
Po uruchomieniu jara nasza po chwili będziemy mogli odwiedzić jej stronę główną wpisując w przeglądarce adres, który w domyślnej konfiguracji będzie taki:
http://localhost:8080/
No dobrze - pisałem, że aplikacje springowe wymagają serwera. Gdzie jest więc serwer? To proste - taka aplikacja korzysta z serwera (kontenera) wbudowanego (embedded container). Przy generacji pliku .jar dodane zostają biblioteki serwera, który jest natomiast startowany w wyniku wywołania odpowiedniej metody. Całkiem fajne, nie?
Spring Boot daje jeszcze trochę innych przydatnych funkcjonalności upraszczających życie. Generalnie jego ideą jest maksymalne uproszczenie konfiguracji (która przy Springu potrafi dać w kość), tak, aby dało się bez bólu i trudu zrobić aplikację, która działa.

Jak zacząć?

Dobrze, koniec gadania. Czas zająć się rzeczami praktycznymi. Do budowania aplikacji użyjemy Mavena - zajmie się on za nas pobraniem zależności, kompilacją oraz generacją prawidłowego jara.
Utwórzmy sobie gdzieś następującą strukturę katalogów/plików (zgodnie z konwencją Mavena):

-MyFirstSpringBootApp
--src
---main
----java
-----com
------example
-------MainClass.java
--pom.xml

MainClass.java będzie naszą główną klasą, a pom.xml będzie zawierał informacje dla Mavena.

pom.xml

Otwórzmy teraz plik pom.xml. Jego zawartość niech będzie następująca (za chwilę postaram się wyjaśnić o co chodzi):

    4.0.0
    com.example
    SpringBootFirstApp
    0.0.1-SNAPSHOT
         
    
        org.springframework.boot
        spring-boot-starter-parent
        1.2.3.RELEASE
    
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        
    

W środku tagu <parent> definiujemy odwołanie do mavenowego projektu rodzica. Dzięki temu nie musimy specyfikować ogromnej ilości zależności, pluginów itd., ponieważ to wszystko dziedziczymy od naszego rodzica, czyli spring-boot-starter-parent. Dalej włączamy plugin do budowania aplikacji używającej Spring Boot - dzięki niemu maven będzie generował nam właściwe, wykonywalne jary. Niżej mamy zdefiniowaną tylko jedną zależność - dla aplikacji webowych będzie zawsze tutaj występować. Przyznacie, że nieskomplikowane? To też jest siła Spring Boota. Co dalej? Teraz możemy już napisać naszą klasę główną.

MainClass.java

Otwórzmy naszą klasę główną i umieśćmy tam następujący kod. Jest to absolutne minimum, aby wystartować wbudowany serwer i uchronić aplikację przed natychmiastową awarią:
package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MainClass {

    public static void main(String[] args) {
        SpringApplication.run(MainClass.class, args);
    }

}

Adnotacja @SpringBootApplication jest niezbędna - jak czytamy w dokumentacji, równoważna jest ona trzem adnotacjom @Configuration, @EnableAutoConfiguration oraz @ComponentScan z domyślnymi parametrami
Funkcja main() zaś inicjuje całą maszynerię przez wywołanie funkcji run() klasy SpringApplication.

Pierwsze uruchomienie

Tak! Mamy wystarczająco kodu, aby naszą aplikację zbudować i uruchomić. Aby dokonać tego pierwszego, wchodzimy przez terminal do folderu MyFirstSpringBootApp i wpisujemy:
mvn install
Jeśli wszystko pójdzie zgodnie z planem, otrzymujemy pod koniec komunikat:
[INFO] BUILD SUCCESS
Teraz jesteśmy gotowi do uruchomienia aplikacji. Wpisujemy:
java -jar target/SpringBootFirstApp-0.0.1-SNAPSHOT.jar
Aplikacja uruchomi się, o czym świadczą m.in. te komunikaty:
2015-05-17 18:06:13.280  INFO 10832 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2015-05-17 18:06:13.282  INFO 10832 --- [           main] MainClass                                : Started MainClass in 3.313 seconds (JVM running for 3.722)
Tak więc, uruchomiony został tomcat, który domyślnie pełni rolę serwera wbudowanego - domyślnie na porcie 8080. Wpisując w przeglądarce adres:
http://localhost:8080/
zobaczymy stronę Whitelabel Error Page - nie ma się co dziwić - nasza aplikacja póki co nie została skonfigurowana do obsługi jakichkolwiek żądań. Czas to naprawić!

Klasa kontrolera

Napiszmy więc na szybko klasę, która posłuży jako banalny kontroler - dzięki temu nasza aplikacja da jakiś znak życia. Utwórzmy w katalogu MyFirstSpringBootApp/src/java/main/com/example plik HelloController.java i wprowadźmy następujący kod:
package com.example;

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

@RestController
public class HelloController {
    
    @RequestMapping(value = "/")
    public String helloWorld() {
        return "

Hello World

" + "Moja pierwsza aplikacja w Spring Boot"; } }

W klasie tej mapujemy wszelkie żądania do korzenia naszej strony do metody helloWorld(), która zwraca to, co widać. Dzięki adnotacji @RestController serwer zwraca do użytkownika w odpowiedzi dokładnie to, co zwraca nasza metoda.
Ponownie budujemy aplikację (mvn clean install) i uruchamiamy utworzonego jara.
Jeśli teraz w przeglądarce ponownie wpiszemy adres:
http://localhost:8080/
Zobaczymy coś takiego:

Hello World

Moja pierwsza aplikacja w Spring Boot

Dokładnie o to nam chodziło!

Podsumowanie

To by było na tyle - udało nam się zrobić prostą aplikację używając Spring Boot. Gratulacje :) .

Brak komentarzy:

Prześlij komentarz