Zaczynamy z kolejnym, długo obiecywanym cyklem — kolejnym kursem, tym razem skupiającym się na Spring Boot, AngularJS i bardziej popularnych technologiach. Zapraszamy!
Uwaga! Ten kurs zakłada już podstawową znajomość Javy oraz Mavena. Zanim zaczniesz, gorąco zachęcamy do zapoznania się z lekcjami 0–7 naszego kursu Javy (choć i dalsze lekcje pomogą Ci lepiej zrozumieć materiał — nie są one jednak konieczne, ale zdecydowanie ułatwią i pomogą zrozumieć to, o czym będziemy pisać).
O projekcie — potrzeba i wymagania
Jeśli śledzisz naszego bloga od jakiegoś czasu z pewnością wiesz, że w 2016 roku współorganizowaliśmy projekt Devoxx4Kids we Wrocławiu. Jak to zwykle bywa w takich sytuacjach, nie obyło się bez problemów organizacyjnych, a jednym z nich były zapisy na zajęcia. Do przeprowadzenia zapisów korzystaliśmy z gotowego narzędzia, które nie do końca wspierało nasze potrzeby — kwestie takie jak lista rezerwowa, prawidłowe przydzielanie uczestników do grup wiekowych, prowadzenie komunikacji na bieżąco, możliwość komunikacji z rodzicami i zebranie odpowiednich danych okazały się być nie tylko trudne, ale też bardzo czasochłonne. Mamy więc konkretną potrzebę biznesową, którą się zajmiemy :) Podstawowe funkcjonalności, które chcemy w niej zawrzeć to:
- Zapisy na zajęcia pozwalające zebrać wszystkie potrzebne informacje o uczestnikach
- Możliwość zarządzania swoją rezerwacją (w tym anulowaniem biletu i możliwość zadania pytania organizatorom)
- Przydział do grup wiekowych na podstawie wieku uczestnika
- Integracja z narzędziami do komunikacji (np. mailchimp)
- Automatyczny zapis na grupę lub listę rezerwową (+informacja o miejscu na liście rezerwowych)
- Możliwość zarządzania kilkoma edycjami (np. w różnych miastach czy w różnych latach, wraz z archiwizacją danych)
Szczegółowymi wymaganiami zajmiemy się w kolejnym kroku — ich opracowaniem, zebraniem i ‘przetrawieniem’ na realia projektowe. Projekt być może zostanie wykorzystany w praktyce, być może nie — na pewno będzie to ciekawe doświadczenie :) Całość nauczeni doświadczeniem z poprzedniego kursu Javy będziemy na bieżąco umieszczać na GitHub’ie.
Technologie
Z uwagi na to, że kurs ten będzie skupiał się na praktycznej pracy z projektem, poza samą częścią technologiczną poświęcimy trochę czasu na konfigurowanie środowiska — czyli m.in. serwer CI oraz automatyczne wdrażanie najnowszej wersji na środowisko produkcyjne. Jako repozytorium użyjemy GitHub’a, jako CI i narzędzie do wdrażania skorzystamy z Hudson’a, a nasze serwery będziemy utrzymywać w chmurze AWS.
Po stronie technologicznej skorzystamy ze Spring Boot’a jako podstawy do stworzenia naszej aplikacji, oczywiście Spring Data i relacyjna baza danych do obsługi repozytorium. Spring Security pozwoli nam zabezpieczyć aplikację, a AngularJS wraz z Bootstrapem będą odpowiedzialne za frontend i wygląd aplikacji. Całość będziemy rozwijali oczywiście jako projekt Mavenowy.
Do tego wszystkie zintegrujemy się z MailChimp’em, pozwolimy na generowanie danych do Excela i umożliwimy wyszukiwanie nie tylko z użyciem bazy danych (użyjemy do tego technologii ElasticSearch) — słowem, czeka nas ciekawa przygoda technologiczna :)
Spring Boot
Wystarczy już wstępu, przejdźmy do rzeczy :) Przede wszystkim — czym jest Spring Boot, technologia, na której oprzemy całą naszą aplikację?
Zapewne wiesz już, czym jest Spring Framework i Maven (a jeśli nie, to koniecznie zapoznaj się z naszym kursem Javy!), czym więc jest Spring Boot? W dużym uproszczeniu jest to platforma, dzięki której uruchomienie projektu z użyciem Spring’a i różnych jego modułów jest jeszcze prostsze i szybsze. Spring Boot zawiera podstawową, domyślną konfigurację, dzięki której możemy uruchomić działającą aplikację webową właściwie w ciągu kilku minut. Jedną z ważniejszych zalet jest jednak możliwość rekonfiguracji — jeśli nie określimy czegoś samodzielnie (np. sposobu, w jaki aplikacja będzie zabezpieczona), Spring Boot użyje wartości domyślnych. Wszystkie jego zachowania można jednak konfigurować i modyfikować, dzięki czemu nie tracimy elastyczności, jaką daje nam Spring Framework (choć czasem faktycznie wygląda to nieco oryginalnie).
Spring Boot zapewnia nie tylko konfigurację, ale także ułatwienia w przypadku projektów Mavenowych — najważniejsze z nich to zarządzanie zależnościami, dzięki czemu nie musimy się martwić o konkretne wersje bibliotek — mamy pewność, że te wybrane przez platformę są ze sobą zgodne i nie powodują problemów (oczywiście platforma zarządza tylko najważniejszymi i najpopularniejszymi zależnościami, niszowego narzędzia czy biblioteki raczej tam nie znajdziemy).
Dodatkowo Spring Boot daje nam także kilka bardzo specyficznych adnotacji — pozwalających np. aktywować określoną konfigurację w zależności od tego, czy dany properties istnieje czy nie. Najczęściej nie są to jednak elementy wykorzystywane w standardowych aplikacjach.
Podsumowując, Spring Boot jest w stosunku do Spring’a tym, czym kompletny samochód jest w stosunku do silnika — narzędziem, które możemy uruchomić i zacząć używać w przeciągu kilku minut, bez konieczności mozolnej konfiguracji (podatnej na błędy). Oczywiście nie trzeba też wykorzystywać wszystkich elementów od razu — jeśli masz aplikację w Springu, możesz zacząć od zarządzania zależnościami i stopniowo modyfikować i upraszczać kolejne elementy aplikacji, ale nie o modyfikowaniu istniejących aplikacji będzie ten kurs ;)
Jeśli uważasz powyższą lekcję za przydatną, mamy małą prośbę: polub nasz fanpage. Dzięki temu będziesz zawsze na bieżąco z nowymi treściami na blogu ( i oczywiście, z nowymi częściami kursu Javy). Dzięki!