[Java][Spring] Jak rozpocząć pisanie w Spring Boot - kurs

W tym poście przedstawię wam najszybszy sposób na tworzenie aplikacji w Spring Boot z wykorzystaniem języka Java. Źródło to powinno stanowić punkt startowy przy pracy z Springiem i wyjaśniać podstawowe kwestie związane z konfiguracją i środowiskiem programistycznym.

Tutorial ten jest skierowany do osób posiadających chociaż podstawową wiedzę z zakresu programowania w javie,

Zacznijmy od wybrania środowiska programistycznego. Na początku proponuje pobranie dedykowanego IDE do pracy z Springiem z oficjalnej strony projektu:

Spring Tool Suite(3.7.1 Relase)

Jest to środowisko bazujące na Eclipse IDE, i jeśli umiemy pracować w Eclipse to w STS odnajdziemy się od razu. Jeśli posiadamy już zainstalowane Eclipse to je również możemy skonfigurować do wspierania Stringa. Polecam jednak na początek skorzystać z świeżej wersji STS, gdyż w innym wypadku mogą pojawić się różnego rodzaju nieoczekiwane problemy.

Po pobraniu i wypakowaniu naszego IDE do folderu, możemy je uruchomić i utworzyć nowy projekt.

Klikamy na File -> New -> Spring Starter Project.






































Następnie musimy skonfigurować wstępne informacje o projekcie:


























Jako nazwę Name podajemy nazwę projektu. W tym wypadku niech to będzie MyFirstSpringBootApp.

Jako Type, zostawiamy Maven Project. Oznacza to że będziemy korzystać z Mavena jako systemu do zarządzania naszym projektem. Dobre wprowadzenie można znaleźć tutaj. Zalecam chociaż pobieżne zapoznanie się z tym artykułem jeśli nie mieliśmy wcześniej do czynienia z żadnym mavenowym projektem.

Group: określa grupę do jakiej należy nasz projekt, zazwyczaj są to dwa pierwsze katalogi pakietu i są analogiczne do głównego pakietu w naszym projekcie(Package)

Jako nazwę Artifact podajemy zazwyczaj trzeci katalog naszego projektu, albo nazwę określającą przeznaczenie danego projektu. W tym wypadku wpisujemy tutorial.

Resztę możemy zostawić bez zmian. Klikamy przycisk NEXT.






W tym oknie możemy wybrać wersje Spring Boot z której będziemy korzystać, aktualnie jest to 1.3.0. W przyszłości będziemy mogli dodawać predefiniowane biblioteki do naszej aplikacji. W tym kursie jednak wszystko dodamy ręcznie.

Możemy więc kliknąć Finish aby zakończyć proces tworzenia projektu. Albo kliknąć Next by przejść do kolejnego ekranu w którym mamy zdefiniowany plik starteru oraz jego parametry. Służą one do skonfigurowaniu adresu paczki na której zbudowany będzie nasz projekt. Nie będziemy tutaj nic zmieniali więc pozostaje nam kliknąć Finish.




Powinniśmy teraz mieć nasz projekt w Package Explorer jak wyżej. Po rozwinięciu projektu przedstawia się on następująco:





Jako pierwszy widzimy source folder, czyli folder z kodem źródłowym naszej aplikacji. Nazywa się src/main/java - nazwa ta pochodzi z konwencji nazewniczej stosowanej w Javie. Poniżej folderu jest pakiet com.example jego nazwę skonfigurowaliśmy w pierwszym ekranie konfiguratora projektu w polu Package.

w source folder src/main/resources - znajdują się pliki konfiguracyjne, obrazki, zasoby wbudowane które będą wykorzystywane przez nas w przyszłości. W Springu domyślnie jest jeden taki zasób w którym ustawiamy całą konfigurację aplikacji o nazwie application.properties. Razem z adnotacjami* będzie pozwalała dostosowywać Spring Boot do naszych wymagań.

*Jako że jestem raczej zwolennikiem stosowania adnotacji zamiast plików konfiguracyjnych XML,
także tutaj będę promował to podejście.

Ostatnim z source folderów jest src/test/java - w tym miejscu będziemy umieszczać przyszłe testy naszej aplikacji. Na razie folder ten nie będzie nas zbytnio interesował.

JRE System Library - są to natywne biblioteki Javy, wbudowane do systemu. Domyślnie występuje w każdym projekcie Javowym.

Maven Dependencies  - jest także folderem bibliotek, tym razem odnosi się do bibliotek zarządzanych przez Mavena, i znajdują się tam nasze biblioteki które dołączyliśmy do projektu.

Poniżej mamy folder src, który jest widokiem do naszej realnej struktury plików. Łączy w sobie dwa source foldery src/main/java i src/main/test.

Ostatnim plikiem jaki nas interesuje jest plik pom.xml - jest to serce mavenowego projektu. Gdzie dokonuje się jego konfiguracji.

pom.xml:

Klikając dwa razy na ten plik, ukaże się nam taki widok:


Jest to ogólny Overview projektu, gdzie możemy wyczytać najważniejsze informacje. Ja osobiścię wolę działać bezpośrednio na kodzie xml. Zwłaszcza że wszystkie rzeczy które w przyszłości będziemy chcieli zrobić w pom.xml będziemy robić poprzez modyfikacje kodu xml i warto jak najszybciej zaznajomić się z wyglądem i składnią tego pliku. Klikamy więc na zakładkę pom.xml i przechodzimy do widoku surowego:


Jeśli nie wiemy co dokładnie znaczą dane sekcje to raz jeszcze odnoszę do krótkiego wprowadzenia.
Ogólnie najważniejsze rzeczy które dostaliśmy w gratisie od kreatora projektu to <parent> jest to projekt mavenowy z którego zaciągamy wszystkie <dependency>, chodzi o to że w klasycznym przypadku dla każdej dodawanej <dependency> musielibyśmy skonfigurować <version> z jakiej chcielibyśmy korzystać np, tak:

        <dependency>
            <groupId>biblioteka</groupId>
            <artifactId>potrzebna-biblioteka</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

dzięki parent`owi, w którym jeśli są już zdefiniowane używane przez nas biblioteki, nie musimy wpisywać linijki <version>

        <dependency>
            <groupId>biblioteka</groupId>
            <artifactId>potrzebna-biblioteka</artifactId>
        </dependency>

Cała sprawa z parentem nie służy tylko do uniknięcia pisania jednej linijki. Dzięki temu korzystamy z domyślnych wersji bibliotek które są dobrane tak, by bezproblemowo działały ze sobą.


Budowa aplikacji Spring Boot:

Ogólny przegląd architektury projektu mamy już za sobą, pora przejść do analizy kodu.
Otwieramy klasę MyFirstSpringBootAppApplication.java:














Mamy tutaj klasyczną klasę z funkcją main, z dodatkowymi dwoma liniami kodu(nie licząc importu)
Dzięki adnotacji @SpringBootApplication, która defacto jest zbiorem kilku innych adnotacji, informujemy że dana klasa może być klasą rozruchową dla Springa, i zawiera w sobie podstawową konfigurację. 
Gdyby nie ta adnotacji kolejna linijka, uruchamiająca aplikację springową:

SpringApplication.run(MyFirstSpringBootAppApplication.class, args);

Zakończyłaby się błędem. 
Podsumowując, aby uruchomić aplikację Springową potrzebujemy klasę wejściową opatrzoną adnotacją @SpringBootApplication, oraz wywołanie metody statycznej run() na klasie SpringApplication . Przyjmującą jako pierwszy argument odwołanie do klasy opatrzonej adnotacją @SpringBootApplication. A jako drugi, argumenty dostarczone do naszej aplikacji z zewnątrz. Wykorzystaniem argumentów z zewnątrz zajmiemy się później.

Modułowa budowa aplikacji

Aplikacje przy użyciu Springa, buduje się modułowo. Idealnie wpasowuje się to w model MVC i pozwala na iteracyjny rozrost naszej aplikacji o kolejne moduły. W ramach tego kursu zrobimy aplikację bazodanową, przechowującą wyniki losowania lotto a następnie wystawimy te dane po REST. Tak by w tutorialu dotyczącym Angulara móc je pobrać i wyświetlić.