POIT #169: Spring Boot

Witam w sto sześćdziesiątym dziewiątym odcinku podcastu „Porozmawiajmy o IT”. Tematem dzisiejszej rozmowy jest Spring Boot.

Dziś moim gościem jest Przemysław Bykowskiprogramista, speaker, youtuber i blogger. Specjalizuje się w prowadzeniu szkoleń z zakresu tworzenia i rozwoju oprogramowania. Cechuje go innowacyjne podejście do przekazywania wiedzy i umiejętność inspirowania do działania. Upraszcza skomplikowane zagadnienia i łamie utarte schematy nauczania, by swoim odbiorcom dostarczyć wartościowy know-how w przystępny, a przede wszystkim angażujący sposób.

W tym odcinku o Spring Boot rozmawiamy w następujących kontekstach:

  • czym jest Spring i jak powstał?
  • jaka jest różnica między Springiem a Spring Bootem?
  • jakie moduły Springa warto znać z punku widzenia runku pracy?
  • przykłady wykorzystania Spring Boota w projektach
  • wady i zalety tego frameworka
  • przyszłość Springa/Spring Boota
  • skąd czerpać wiedzę i jak się uczyć?

Zdobądź książkę „SPRING BOOT: LIVEBOOK”!

W dniach 28.09 – 05.10.2022 opublikuj post w swoich kanałach na social media rekomendujący ten odcinek podcastu dla swoich znajomych. Podeślij do mnie, na maila: krzysztof@porozmawiajmyoit.pl, linka do tego posta lub jego screenshot. Spośród nadesłanych postów wybiorę dwa, których autorzy otrzymają darmowy egzemplarz książki Przemka. Powodzenia!

Subskrypcja podcastu:

Linki:

Wsparcie na Patronite:

Wierzę, że dobro wraca i że zawsze znajdą się osoby w bliższym lub dalszym gronie, którym przydaje się to co robię i które zechcą mnie wesprzeć w misji poszerzania horyzontów ludzi z branży IT.

Patronite to tak platforma, na której możesz wspierać twórców internetowych w ich działalności. Mnie możesz wesprzeć kwotą już od 5 zł miesięcznie. Chciałbym oddelegować kilka rzeczy, które wykonuję przy każdym podcaście a zaoszczędzony czas wykorzystać na przygotowanie jeszcze lepszych treści dla Ciebie. Sam jestem patronem kilku twórców internetowych i widzę, że taka pomoc daje dużą satysfakcję obu stronom.

👉Mój profil znajdziesz pod adresem: patronite.pl/porozmawiajmyoit

Pozostańmy w kontakcie:

 

Muzyka użyta w podcaście: „Endless Inspiration” Alex Stoner (posłuchaj)

Transkrypcja podcastu

To jest 169. odcinek podcastu Porozmawiajmy o IT, w którym z moim gościem rozmawiam o Spring i Spring Boot. Przypominam, że w poprzednim odcinku rozmawiałem o VMware. Wszystkie linki oraz transkrypcję dzisiejszej rozmowy znajdziesz pod adresem porozmawiajmyoit.pl/169

Ocena lub recenzja podcastu w Twojej aplikacji jest bardzo cenna, więc nie zapomnij poświęcić na to kilku minut. Od niedawna można wystawiać oceny podcastom w Spotify. Będzie mi bardzo miło, jeśli w ten sposób odwdzięczysz się za treści, które dla Ciebie tworzę. Dziękuję.

Jeśli rozglądasz się za konkretnymi ofertami pracy, z widełkami wynagrodzeń, opisem stanowiska, przyszłych obowiązków i procesu rekrutacji, to mam do polecenia portal solid.jobs. Solidne oferty pracy znajdziesz na solid.jobs.

Przypominam też o ciekawej ofercie pracy dla Medium, Senior Java Developerów i Architektów Java. Dołącz do zespołu Future Processing, pracującego m.in. dla Fintechu Demica. Możesz się rozwijać nie tylko w samej Javie, ale też w języku funkcyjnym Scala, w obszarze DevOps, Performance czy Security. Wszystko to w dobrej atmosferze Future Processing i z dopasowanymi kulturowo klientami. Pracując przy projekcie Demica, poznasz platformę opartą na mikroserwisach z backendem w Javie i Springu i frontendem w Angular, a całość uruchomiona w skalowalnej infrastrukturze AKS, czyli Azure Kubernetes Service. Ciekawym obszarem jest serce systemu, czyli silnik do przetwarzania zasobów, np. faktur, który został napisany w Scali przy użyciu platformy Spark. Dodatkowo jako bazę danych w aplikacji obok MySQL wykorzystywany jest Elasticsearch. Brzmi ciekawie? Zerknij na ogłoszenie na stronie kariera.future-processing.pl. Co ważne, praca możliwa jest w wersji zdalnej lub hybrydowej z biur w Gliwicach i Gdańsku.

Ja się nazywam Krzysztof Kempiński, a moją misją jest poszerzanie horyzontów ludzi z branży IT. Środkiem do tego jest między innymi ten podcast. Wspierając mnie przez Patronite, pomagasz w realizacji tej misji. Dlatego już dziś wejdź na porozmawiajmyoit.pl/wspieram i sprawdź szczegóły. Ja natomiast bardzo dziękuję moim obecnym patronom. A teraz życzę Ci już miłego słuchania!

Odpalamy!

 

Cześć! Mój dzisiejszy gość to programista, spiker, youtuber i bloger. Specjalizuje się w prowadzeniu szkoleń z zakresu tworzenia i rozwoju oprogramowania. Cechuje go innowacyjne podejście do przekazywania wiedzy i umiejętność inspirowania do działania. Upraszcza skomplikowane zagadnienia i łamie utarte schematy nauczania, by swoim odbiorcom dostarczyć wartościowy know-how w przystępny, a przede wszystkim angażujący sposób. Moim i Waszym gościem jest Przemysław Bykowski.

Przemku, witaj w podcaście.

 

Dziękuję Ci, Krzysiek, za zaproszenie do podcastu. Witam naszych wszystkich słuchaczy i zachęcam do słuchania dzisiejszego materiału.

 

Kto tylko śledzi Przemka w socjal mediach albo czyta jego bloga, albo ogląda jego filmiki, to wie, że Przemek jest specjalistą m.in. od Springa, od Spring Boota. I właśnie ten temat będzie u nas rozbierany na czynniki pierwsze. A zanim do tego przejdziemy, to chciałbym Cię, Przemku, zapytać, tak jak każdego mojego gościa, czy słuchasz podcastów. Jeśli tak, to może masz jakieś audycje warte polecenia?

 

Kiedyś znacznie więcej słuchałem podcastów. Tematyka, która mnie głównie interesowała, to związana z architekturą oprogramowania, z programowaniem, ale również tematyka biznesowa, marketingowa. Słuchałem również oczywiście, Krzysiu, Ciebie. Więcej słuchałem, gdy dominowała praca on-site. Były to czasy 2010, 2015, kiedy pojęcie pracy zdalnej nie istniało. I w momencie, kiedy dojeżdżałem do swojej pracy czy to rowerem, czy to samochodem, komunikacją miejską, to było bardzo dużo czasu, aby tych podcastów słuchać. I właśnie ten czas wykorzystywałem, żeby słychać wartościowych podcastów, które dodatkowo mogły mnie rozwinąć. Natomiast odkąd żyjemy w czasach postpandemicznych, gdzie dominują praca remote dominuje, to brakuje czasu na te podcasty. I kiedy tylko i wyłącznie mam więcej czasu na samorozwój, to decyduję się na połączenie demonstracji, prezentacji i oglądanie w dużej mierze form wideo, które są w stanie dostarczyć dużo wartościowych informacji.

Jednak wszystkich naszych widzów, słuchaczy, którzy dojeżdżają do pracy samochodem, rowerem, komunikacją miejską, zachęcam do zagospodarowania tego czasu i posłuchania wartościowych podcastów, m.in. Porozmawiajmy o iT, bo można wysłuchać wiele fantastycznych rozmów, które zmotywują do działania. Więc każdego, kto ma wolną chwilę, zachęcam.

I sam, tak jak powiedziałem, jeszcze mi się zdarza gdzieś dojechać rowerem, to jest dla mnie must have, bo lubię ten czas wolny wykorzystywać.

 

Podpisuję się pod tymi rekomendacjami z zaleceniem co do słuchania podcastów, bo to może być faktycznie fajne źródło czerpania wiedzy właśnie w tych momentach, kiedy wykonujemy jakieś inne czynności.

 

Pozwól, że jeszcze dodam, że dla mnie podcasty to są głównie inspiracje. Bo wiedza, którą zdobędziemy, to jest jedna część, ale posłuchanie osób, które dostarczą nam inspiracji, że po tym podcaście wychodzimy i mamy energię do działania, chcemy coś zrobić, chcemy coś spraktykować, to jest druga rzecz. I to jest to, co ja z podcastów wyciągam najbardziej. Że ludzie mnie podpalają do działania. I dzięki temu mi się chce. Chce mi się działać, robić i idę dalej.

 

Te historie ludzkie to jest istotny czynnik. To jest też, myślę, fajna rzecz, że poprzez podcasty możesz się czegoś nowego nauczyć, możesz mieć jakąś rozrywkę, możesz mieć inspirację, więc tym bardziej warto.

To zamknijmy może ten wątek i przejdźmy do naszej właściwej części rozmowy. I zanim zaczniemy rozbierać sobie Springa i Spring Boota na części pierwsze, to chciałbym Cię zapytać o historię tego frameworka. Jak to się w ogóle zaczęło, na jaki problem odpowiadał, jak powstał – gdybyś mógł taki mały rys historyczny nam tutaj przedstawić, to byłoby idealnie.

 

Historia powstania Springa jest bardzo ciekawa, bo sięga 1998 roku. Trochę historycznie to zabrzmiało, ale postarajmy się przypomnieć sobie te czasy. Bo wtedy zaczęły dominować rozwiązania internetowe, czyli np. poczta elektroniczna, bankowość. Te wszystkie rozwiązania zaczęły po prostu być coraz częściej wykorzystywane przez odbiorców. Więc firma Sun, która odpowiadała za Javę, stwierdziła: okej, stwórzmy narzędzie, które będzie służyło nam do budowania takiego typu rozwiązań. I tak właśnie powstało rozwiązanie, które się nazywało Java J2EE. Było to narzędzie, które służyło nam do tworzenia aplikacji internetowych z wykorzystaniem Javy. I pewnego razu pewien programista Rod Joyson postanowił napisać na ten temat książkę i opisywał, jak działa ta technologia, jak ją wykorzystywać, do czego ją stosować. I opisywał każde rozwiązanie, przykłady wykorzystania.

Jednak w momencie, kiedy pisał tę książkę, przeszła mu przez myśl pewna teza: Te rozwiązania są zbyt skomplikowane. Przecież to jest nieintuicyjne, słabo przemyślane. I wówczas twierdził, że jest w stanie zrobić to lepiej. I oczywiście skończył pisać swoją książkę, ale tuż po niej wziął się do pracy nad nowym rozwiązaniem, które będzie znacznie łatwiejsze w wykorzystaniu. I tak właśnie powstał Spring.

Jego kluczowym założeniem jest zaadaptowanie istniejących bibliotek i rozwiązań oraz dostarczenie programiście intuicyjnego interfejsu. Czyli nie tworzymy więcej nowych rozwiązań, nie wymyślamy koła na nowo, tylko jeżeli jest jakaś biblioteka, którą możemy zaadaptować, to robimy to na potrzeby Springa.

Można się zastanawiać, skąd się wziął Spring. Spring oznacza z ang. wiosnę, sprężynkę. Więc jest to rozwiązanie, którego rodzaju jest powiewem świeżości, jest czymś elastycznym, wygodnym. I sprawia, że programiście jest znacznie prościej tworzyć rozwiązania internetowe.

Ale nie tylko i wyłącznie internetowe, bo oczywiście z wykorzystaniem Springa można tworzyć aplikacje mobilne, desktopowe, głównie oczywiście webowe (ponad 99% rozwiązań).

 

Jego kluczowym założeniem jest zaadaptowanie istniejących bibliotek i rozwiązań oraz dostarczenie programiście intuicyjnego interfejsu. Czyli nie tworzymy więcej nowych rozwiązań, nie wymyślamy koła na nowo, tylko jeżeli jest jakaś biblioteka, którą możemy zaadaptować, to robimy to na potrzeby Springa. 

 

Dobrze, to znamy już mniej więcej rys historyczny, wiemy, na jaki problem odpowiada. To myślę, żeby jeszcze nie mylić pojęć, bo sam się do tego gdzieś przyczyniłem na początku, to może gdybyś powiedział, czym jest Spring, czym jest Spring Boot. Jaka jest tutaj różnica, na jaki problem odpowiada i po co nam właściwie Spring Boot?

 

Spring Boot powstał mniej więcej 10–12 lat temu. Wydaje mi się, że taki pierwszy release Spring Boota powstał w roku 2014. Do komercyjnego użytku wszedł chyba w 2015 lub 2016. I jest to pewnego rodzaju framework do frameworka. Czyli można powiedzieć, że to jest taka kolejna iteracja Springa – czyli Spring Boot na sterydach.

Podejście było takie, że w momencie, kiedy korzystamy ze Springa, wiele rzeczy musimy wykonywać powtarzalnie. Czyli np. jeżeli tworzymy połączenie z bazą danych, musimy napisać klasę konfiguracyjną. Ktoś stwierdził: no ale po co. Weźmy, dostarczmy programiście gotowy zbiór konfiguracji i on będzie to wykorzystywał tylko i wyłącznie na swoje potrzeby i jeżeli coś nie będzie mu odpowiadało, to może to skonfigurować wg własnego uznania. 

W każdym razie można powiedzieć, że Spring Boot to jest nic innego, jak połączenie Springa z zestawem danych konfiguracyjnych i jeszcze w tym wszystkim jest kontener webowy, który służy nam do łatwego deploymentu. Czyli na dobrą sprawę jednym kliknięciem możemy odpalić naszą aplikację i ona już będzie uruchomiona na kontenerze webowym, po to, żeby była gotowa do użytku. Więc takie podejście nazywa się production ready, czyli będziemy w stanie od razu wdrożyć rozwiązanie na produkcję. 

Dodam jeszcze, że z punktu widzenia rynku pracy często widzimy w ogłoszeniach: wymagamy Springa. Jednak w praktyce na ten moment już mało osób pamięta o samym Springu. Na dobrą sprawę, jeśli ktoś mówi o Springu, to w domyśle chodzi mu o Spring Framework. Jeżeli gdzieś jeszcze były tworzone rozwiązania w Spring i one są nadal utrzymywane, to faktycznie firmy często poszukują deweloperów do pracy w samym Springu. Natomiast we wszystkich nowszych projektach, tak jak powiedziałem, mniej więcej od 2014 czy 2015 roku i świeższych, już raczej Springa nie doświadczymy. Każdy raczej decyduje się na wykorzystanie Spring Boota ze względu na łatwość jego wykorzystania. Chociaż sama transformacja przejścia deweloperów ze Springa na Spring Boota była bardzo trudna, ale to jest już inna historia. 

 

To może zostańmy chwilę przy rynku pracy, bo to jest też, myślę, ciekawy temat. Spring jak większość frameworków ma budowę modułową, prawda? Chciałbym Cię zapytać o to, jakie moduły Springa warto, albo wręcz trzeba znać, jeśli myślimy o szukaniu pracy z wykorzystaniem tego frameworka, jakie są moduły atrakcyjne dla rynku pracy, a o jakich wg Ciebie warto również powiedzieć pod względem atrakcyjności dla programisty, dla dewelopera.

 

Z punktu widzenia rynku pracy must have jest Spring Core i w jego ramach zawierają się takiego rodzaju biblioteki, jak np. narzędzia, które umożliwiają nam tworzenie testów jednostkowych i integracyjnych. Oczywiście sam mechanizm Dependency Injection Inversion of Control, więc to są takie podstawowe narzędzia, które pozwalają nam na tworzenie i pracę z kontekstem Springa.

Dodatkowo must have wg mnie to jest oczywiście Spring Web. I tu istotna jest cała warstwa webowa, czyli jesteśmy w stanie dostarczyć kontener webowy, który umożliwia nam tworzenie aplikacji internetowych. Tam również zawierają się różnego rodzaju narzędzia, które służą nam do stworzenia REST API czy też klienta REST API.

Kolejnym ważnym modułem jest Spring Data JPA. I tutaj mamy zestaw narzędzi, które są wykorzystywane do tego, abyśmy pracowali z bazami danych. I to najczęściej są relacyjne bazy danych. To narzędzie jest o tyle wygodne, że niezależnie od rodzaju bazy danych, jaką wybierzemy, czy to będzie baza oraclowa, microsoftowa, czy jakakolwiek inna, to ten interfejs zawsze będzie taki sam. 

Więc to są wg mnie te trzy moduły, czyli Spring Core, Spring Web, Spring Data JPA, które są wg rynku pracy najbardziej pożądane. Inne moduły już raczej podchodzą pod to, w jaki sposób firma się profiluje i jakiego rodzaju rozwiązania tworzy. Bo czasami mogą być dodatkowo wymagane systemy kolejkowe, czasami to też jest baza danych nierelacyjna, którą mogą wykorzystywać w swoim projektach, więc głównie to tyczy się tego, jakie firma ma zapotrzebowanie.

Natomiast z punktu widzenia deweloperów, to co odnotowałem na swoich live streamach, to widzę, że najczęściej materiałami, które cieszą się uznaniem, to cały Spring Cloud. Pod Spring Cloud kryje się cały zestaw narzędzi, które służą nam do tworzenia architektury mikroserwisów. I to są np. Discovery Service, Cloud Messaging, Rererse Proxy. To wszystko służy nam do tego, żebyśmy mogli dobrze zaprojektować naszą architekturę mikroserwisów, i w tym działać. Mimo że architektura serwisów nie jest najpopularniejszym konceptem, to mogę powiedzieć jasno, że to jest to, co programistów najbardziej ciekawi. I tak, jak powiedziałem, na swoich live streamach często jestem w stanie odnotować takie picki, jak pół tysiąca programistów, którzy właśnie interesują się tą tematyką. 

Oprócz tego bardzo ważnym modułem jest też Spring Security. I to jest na dobrą sprawę moduł, który dostarcza nam szereg narzędzi, które służą nam do zabezpieczania aplikacji i również jest to tematyka, którą warto znać.

 

Więc to są wg mnie te trzy moduły, czyli Spring Core, Spring Web, Spring Data JPA, które są wg rynku pracy najbardziej pożądane. Inne moduły już raczej podchodzą pod to, w jaki sposób firma się profiluje i jakiego rodzaju rozwiązania tworzy. Bo czasami mogą być dodatkowo wymagane systemy kolejkowe, czasami to też jest baza danych nierelacyjna, którą mogą wykorzystywać w swoim projektach, więc głównie to tyczy się tego, jakie firma ma zapotrzebowanie. 

 

 

Świetnie. Ja przypominam, że dzisiaj moim gościem jest Przemysław Bykowski. Rozmawiamy o frameworku Spring Boot. Przemku, powiem Ci szczerze, że zainspirowałeś mnie na początku, mówiąc, że podcasty Ciebie inspirują. Ja myślę, że ta inspiracja bardzo często wynika właśnie z historii, które człowiek ma za sobą i o których może opowiedzieć, więc chciałbym zapytać Cię o Twoje historie, o Twoje doświadczenia, projekty, które realizowałeś w ramach lub z wykorzystaniem Spring Boota. Jak to wyglądało, jakie problemy ten framework tam rozwiązywał? Myślę, że to byłoby wartościowe dla słuchaczy.

 

W mojej karierze programisty, która liczy już kilkanaście lat, pracowałem w wielu projektach, takich jak np. systemy bankowe, systemy obsługi prawnej, eventowej, czy nawet systemy branży brandfield – mój ostatni projekt, nad którym spędziłem nad takim kilka lat. Zajmuje się przetwarzaniem informacji pochodzących z odkrywki ropy i gazu na oceanach. Więc jest to usługa, która zajmuje się przetwarzanie dużej ilości danych. Musimy je pozyskać z czujników wodnych, gazowych, ciśnieniowych, musimy je zagregować, wykryć anomalie, przetworzyć i przekazać w uporządkowanej formie dla odbiorcy. 

I w tych wszystkich systemach, które opisałem, Spring Boot sprawdza się znakomicie, więc mogę jasno powiedzieć, że idealnie nadaje się do tych rozwiązań. Jednak z punktu widzenia dewelopera największy skok emocjonalny, zachwycenie odniosłem w swoim pierwszym projekcie programistycznym, w którym właśnie wykorzystywaliśmy Spring Boota. Był to system fintechowy, bankowy – poruszał na dobrą sprawę te dwie tematyki. I jak wiemy, w systemach bankowych, fintechowych, jeżeli chodzi o pieniądze, bardzo ważne są transakcje i to, w jaki sposób te transakcje wykorzystamy. 

Więc w momencie, gdy zaczynaliśmy tworzyć ten projekt, robiliśmy to z wykorzystaniem Javy EE (jeszcze). Korzystaliśmy z bazy danych, więc ręcznie tworzyliśmy, zamykaliśmy wszystkie połączenia. Sprawdzaliśmy, czy zmiany się powiodły, zatwierdzaliśmy je, a jeśli się nie powiodły, to trzeba było je cofnąć. I to wszystko wykonywaliśmy ręcznie. 

Teraz wyobraź sobie jedną metodę transakcyjną i z niej wywołujemy drugą metodę transakcyjną. I pojawia się pytanie, czy to będzie się wykonywało w jednej transakcji, czy to będzie wykonywało dwie różne transakcje. To jest jeden case, nad którym się zastanawiamy. Drugi przypadek, to jeżeli ta zagnieżdżona metoda, którą wywołujemy, się powiedzie, a metoda, która jest nadrzędną, się nie powiedzie, to czy te zmiany w zagnieżdżonej metodzie są zatwierdzone, czy nie? A jeżeli np. nie powiodą się te zmiany i przechwycisz wyjątek, o czym trzeba pamiętać, to czy wykona się ten rollback metody zagnieżdżonej? Czy metoda nadrzędna w ogóle o tym wie, że w ogóle wystąpił wyjątek? 

Więc jest mnóstwo rzeczy, które są niejasne. Nie wiadomo, jak je obsłużyć, bo każdy deweloper ma swoją wizję, we własny sposób implementuje rozwiązania i nie ma wspólnej specyfikacji. W momencie, kiedy wszedł Spring Boot, okazało się, że na te wszystkie zagwozdki, które teraz wymieniłem, odpowiada tylko i wyłącznie jedna adnotacja. Więc teraz programista nie musi się martwić, nie musi rozkminiać, jak to powinno zostać zrobione, obsłużone, bo przy wykorzystaniu tylko i wyłącznie jednej adnotacji programista jest w stanie rozwiązać cały ten problem. 

Co więcej, inny programista, który widzi to rozwiązanie, już zwracając uwagę na samą adnotację, jest w stanie zrozumieć, jak ten system działa. Czyli nie mamy tysiąca klas, które są nieuporządkowane i każdy programista się zastanawia, czy w tym module jest to rozwiązane w sposób A, czy w tym module jest to rozwiązane w sposób B, tylko po prostu jest spójny interfejs. I każdy programista, który widzi to rozwiązanie, jest w stanie w jasny sposób wiedzieć, do czego to rozwiązanie służy i jaki będzie ono dawało finalny efekt. Więc w momencie, gdy zaczynaliśmy korzystać ze Spring Boota, zastanawialiśmy się, czy będzie jeszcze praca dla programistów, bo okazywało się, że to, nad czym spędzaliśmy wiele tygodni, jesteśmy w stanie rozwiązać zaledwie jedną adnotacją, i to zajmuje tyle, co pstryknięcie palcem, i gotowe.

 

Właśnie te gotowe narzędzia, które mamy we frameworku, to jest na pewno wielka zaleta. To jest coś, co jest przetestowane, sprawdzone, na czym możemy polegać. Chciałbym przejść właśnie do wątku wad i zalet Spring Boota. O czym byś mógł tutaj powiedzieć?

 

Krzysiek, co ja mam Ci powiedzieć? Jako wielki entuzjasta widzę tylko zalety. Ale okej, postarajmy się być konsekwentni. Przede wszystkim to, co zaliczyłbym do zalet, to łatwy start. Każda osoba, która chce się nauczyć pracować ze Spring Bootem, na dobrą sprawę tylko instaluje pakiet JDK i jest gotowa do pracy z tym frameworkiem. A jeszcze pamiętam inne, konkurencyjne rozwiązania: frameworki dla specjalistów JVM. Był np. taki popularny Dropwizard i żeby zacząć w ogóle z nim pracę, trzeba było się nieźle namęczyć, żeby w ogóle postawić to na swojej maszynie i dalej z tym pracować. 

Jeżeli chodzi o Spring Boota, to wchodzimy na stronę start.spring.io i tam mamy taki ładny generator, który jest w stanie nam wygenerować już gotowe rozwiązanie i już z tym rozwiązaniem, po zaimportowaniu do środowiska programistycznego jesteśmy w stanie pracować. Po prostu jest to bardzo, bardzo proste. Ponadto jest wiele innych narzędzi, np. JHipster, gdzie powiemy, co chcemy, żeby aplikacja robiła, i już jest w stanie nam wygenerować aplikację w Spring Boocie, która będzie dostarczała wszystkie mechaniki, których oczekujemy, np. tworzenia konta dla użytkowników, przykładowe widoki, tylko podstawiamy tam swoje dane albo wpychamy swoje API, po to , żeby dalej z tym pracować i np. wejść na produkcję.

Drugą rzeczą, z takich największych zalet, jest community. Tak jak powiedziałem, jest to najpopularniejszy framework dla Java deweloperów, więc na dobrą sprawę większość Java deweloperów zna Spring Boota albo musi się przygotować na to, że jeżeli pracuje w technologiach webowych, to musi z nim zacząć pracować. Więc community jest na tyle duże, że mamy dużo narzędzi, dużo pomocy, dużo wsparcia, dużo fantastycznych bibliotek, które jesteśmy w stanie podpiąć do naszego rozwiązania. 

Jest łatwy do wdrożenia. Jest tutaj wbudowany kontener webowy, więc jesteśmy w stanie tylko i wyłącznie artefakt wdrożyć na serwer, i to już nam działa. Nie musimy dodatkowo zapewniać konfiguracji, tylko wdrażamy na serwer i mamy to.

I ostatnią z takich najważniejszych rzeczy jest ogrom modułów. Chcemy pracować z chmurami? – proszę bardzo, pobieram odpowiedni moduł. Chcemy pracować z bazami danych? – pobieramy odpowiedni moduł, i już mamy. Chcemy pracować z kolejkami? Jakie chcesz: RabbitMQ, Kafka? – proszę bardzo, mamy do tego narzędzia. Chcesz pracować z Security? – co chcesz, to masz. Więc na dobrą sprawę ten ogrom modułów sprawia, że jesteśmy w stanie zintegrować się praktycznie ze wszystkim.

Natomiast jeżeli chodzi o wady, to się muszę lekko zastanowić, ale to, co najbardziej zapamiętałem, to był duży problem transformacji ze Springa na Spring Boota. Bo Spring Boot dostarcza nam automatyczną konfigurację. I dużo deweloperów miało problem z tym, że framework coś robił za dewelopera, a deweloper nie miał pojęcia, co się stało, jak możliwe, że to się wykonało. To jest właśnie pokłosie tego, że Spring Boot wykorzystuje dużo AOP, czyli też implementacji wzorca Proxy, i część rzeczy jest zakorzeniona w naszym frameworku i czasami programiście ciężko jest kontrolować kod. Oczywiście to wynika z tego, że trzeba dobrze znać specyfikację Spring Boota, żeby z nią działać, natomiast nieraz programiści mieli tę zagwozdkę, że nie rozumieli, z czego wynikają niektóre mechanizmy, które się wykonują w ramach tego frameworka.

Ale tak, jak powiedziałem, jak dla mnie jest to rozwiązanie, które wymaga czasem zagłębienia się w niego, żeby w pełni zrozumieć wszystkie zagadnienia.

To, co też zalicza się do wad Springu, to on się nie sprawdza przy dużych projektach monolitycznych. Jest to kwestia tego, że Spring Boot nie jest najlepszym frameworkiem, który pozwala się skalować. Jest to raczej framework, który ma niskie możliwości skalowania, więc on sprawdza się świetnie przy małych projektach, np. kiedy mamy te projekty mikro usługowe. Wówczas mamy mikrousługi, które zbierają się w jedną sieć i razem tworzą większe system średnich projektach. Natomiast jeżeli mamy taki obszerny monolit, to faktycznie konsumpcja zużycia pamięci czy też czasu dostępu jest czasami bardzo obszerna, więc wówczas przy takich większych projektach Spring Boot po prostu się dławi. I często właśnie w internecie są takie memy, że już po prostu zużycie CPU, jeżeli uruchamiamy to na lokalnej maszynie, wynosi 99% i można na tym jajka smażyć. No i faktycznie, czasami po prostu jeżeli wdrożymy coś takiego na serwer, to te serwery się palą. 

 

Faktycznie widać, że oczywiście jak każde rozwiązanie IT, to również ma swoje zalety i wady. Chciałbym przejść do takiego pytania, które jest chyba trochę formalnością dla Ciebie jako fana tych rozwiązań, ale jaka przyszłość czeka Spring Boota? Co tam jest na horyzoncie? A tak na serio, to też chciałbym Cię poprosić o to, żebyś może zestawił ten framework z innymi frameworkami Javowymi, żeby też dać jakiś taki kontekst, gdzie z tym rozwojem jesteśmy.

 

Na ten moment mamy Springa 5, Spring Boota 2. Jednak VMwere obiecał nam, że jeszcze w tym roku zobaczymy Spring Boota 3 i Springa 6. Jednak na ten moment trochę firma milczy i nie wiadomo, czy uda się dowieść to rozwiązanie w tym roku. Jednak to są aktualne wersje, których się spodziewamy. Oprócz tego Spring Boot ma grono konkurentów, którzy w ostatnim czasie bardzo szybko zyskują na popularności. I na dobrą sprawę te wszystkie frameworki pojawiły się równolegle, a do nich należy na przykład Micronaut Quarcus Helidon, i to, co jest wspólnym mianownikiem dla tych wszystkich konkurencyjnych rozwiązań, to jest wykorzystanie GraalVM-a. GraalVM to jest w uproszczeniu taka maszyna wirtualnych na sterydach, która jest od Oracle’a i ona po prostu od razu przekształca nasz kod na kod natywny. Przez to wszystkiego rodzaju usługi uruchamiają się znacznie szybciej.

W ostatnim czasie dominują rozwiązania typu serverless, czyli wdrażamy coś na chmurę i liczymy na to, żeby ten czas odpowiedzi był jak najszybszy. Bo czasami działa to w ten sposób, że ktoś po prostu wykonuje tylko i wyłącznie jeden request do naszej aplikacji i później już z tej naszej aplikacji nie korzysta, więc w dużej mierze liczy się ten czas odpowiedzi.

Pamiętam taki case, który mieliśmy w naszej firmie, w której pracowałem jako Project Leader. Stworzyliśmy start technologiczny dla naszego nowego projektu. Chcieliśmy to zbalansować pomiędzy kosztami i oczywiście naszym zespołem programistycznym, z zasobami, które mamy. Nie tylko i wyłącznie ludzkimi, ale też finansowymi. I wówczas jeden z kolegów zasugerował nam na naszym spotkaniu Team Leaderów i Project Leaderów, żeby wykorzystać Quarcusa. Jest to rozwiązanie, które właśnie wykorzystuje GraalVM-a, i jest dedykowany do mikroserwisów. I po prostu on wymiata pod względem czasu odpowiedzi. Czyli bardzo szybko się uruchamia i od razu jest w stanie obsługiwać nasze żądania.

Niestety Spring Boot ma to do siebie, że żeby on się uruchomił, to jednak wymaga nieco więcej czasu na podniesienie się. To wynika z tego, że właśnie Spring Boot nie wykorzystuje GraalVM-a, o którym mówiłem wcześniej, a Helidon – tak. Oczywiście na ten moment są prace nad tzw. Spring Native, który będzie wykorzystywał GraalVM-a , jednak prace są jeszcze w powijakach. To jest tylko i wyłącznie wersja eksperymentalna. 

Ale wracając do tematu, gdzie mieliśmy spotkanie i zastanawialiśmy się, czy nie zastąpić czasami Spring Boota. Jeden z Team Leaderów opowiadał się Quarcusem z tego względu, że jego czas odpowiedzi był znacznie wydajniejszy. Na chmurze wykorzystywaliśmy usługę chmurową, która po prostu wyłączała się po pewnym czasie, jeżeli nikt z niej nie korzystał. Był to tradycyjny sposób na zaoszczędzenie kosztów wykorzystania chmury. I tak jak powiedziałem wcześniej, Quarcus bardzo szybko wstawał i dawał odpowiedź.

Spring boot miał to do siebie to, że jednak ten czas odpowiedzi był dużo dłuższy, bo musiał się uruchomić i dopiero dawał odpowiedź. I z punktu widzenia projektów stwierdziliśmy: stawiajmy Quarcusa, bo jest on wydajniejszy, sprawdzi się nam w tym projekcie. Oczywiście ze względu na wydajność. Ja oczywiście jako duży entuzjasta Spring Boota troszkę pozwoliłem sobie to zanegować. Zanegowałem to od strony biznesowej, która skłania się do tego, że: słuchajcie, panowie, my nie mamy w zespole nikogo, kto by znał się na tym Quarcusie. Na rynku pracy jest mało osób, które się specjalizują w tym frameworku, więc musielibyśmy poświęcić nieco czasu, aż się cały zespół nauczy tego Quarcusa i wówczas nawet jak ktoś z projektu odejdzie, zmieni pracę, to tracimy duży zasób wiedzy, bo już takiego człowieka będzie nam ciężko zastąpić.

Więc faktycznie takie rozwiązana, które wspomniałem, oparte GraalVM-ie, możliwe, że są przyszłością, z tego względu, że są one dużo wydajniejsze, jednak z punktu widzenia rynku pracy jest mało tych specjalistów i ciężko ich pozyskać. Być może trend się zmieni. Jednak ze względu na to, że Spring Boot ma ogromną część komuniki entuzjastów, może być tak, że ciężko będzie go zdetronizować.

Wydaje mi się, że przede wszystkim zawsze, kiedy wybieram jakiekolwiek stack technologiczny, to przede wszystkim kieruje się community i wsparciem. Jeżeli widzę, że jakieś rozwiązanie jest znacznie bardziej popularne, to od razu wiem: Okej jak będę pracował z tym stackiem technologicznym, to na stack overflow znajdę na pewno odpowiedź na moje pytanie. Czy jak będę pracował wkład głosem, to czy znajdę odpowiedź na moje problemy? – nie wiadomo. Nie wiadomo, jak to będzie się integrowało. Wiem, że np. na bazie Spring Boota są już gotowe rozwiązania, które świetnie się integrują z tymi narzędziami, których potrzebuje.

Dlatego też z punktu widzenia biznesowego wydaje mi się, że na ten moment Spring Boot jest nie z nie do zdetronizowania. I cieszę się, że powstają te nowe frameworki, bo one są naprawdę wydajne, zapowiadają się fajnie, a dzięki temu, że Spring Boot ma konkurencję, to oczywiście twórcy Spring Boota będą dążyć do tego, żeby zapewnić mu takie ficzery, które są właśnie widzialne w innych frameworkach. I dalej, tak jak powiedziałem, Spring Native jest w drodze, zobaczymy, co z tego wyjdzie.

 

Na ten moment mamy Springa 5, Spring Boota 2. Jednak VMwere obiecał nam, że jeszcze w tym roku zobaczymy Spring Boota 3 i Springa 6. Jednak na ten moment trochę firma milczy i nie wiadomo, czy uda się dowieść to rozwiązanie w tym roku. Jednak to są aktualne wersje, których się spodziewamy. Oprócz tego Spring Boot ma grono konkurentów, którzy w ostatnim czasie bardzo szybko zyskują na popularności. I na dobrą sprawę te wszystkie frameworki pojawiły się równolegle, a do nich należy na przykład Micronaut Quarcus Helidon, i to, co jest wspólnym mianownikiem dla tych wszystkich konkurencyjnych rozwiązań, to jest wykorzystanie GraalVM-a.

 

Ciekawe. Dokładnie, myślę, że zdrowa konkurencja jest zawsze dobra i wychodzi na korzyść. Właśnie. Dla tych słuchaczy, którzy zainteresowali się tematem, którzy być może chcieliby poznać to popularne na rynku pracy również rozwiązanie, to może, Przemku, powiedz, jak zacząć się ze Spring Bootem. Jakie materiały byś polecił do nauki? O czym tutaj warto wspomnieć?

 

Kiedy sam uczyłem się Spring Boota, to niestety miałem deficyt materiałów do nauki. Nie było tak dużo ciekawych rzeczy, które by mogły odzwierciedlić rzeczywiste wykorzystanie Spring Boota, dlatego też sam zacząłem swoją przygodę ze Spring Bootem i zacząłem tworzyć pewnego rodzaju materiały na moim kanale na YouTubie, na moim blogu, oraz napisałem dwie publikacje, książki na temat Spring Boota.

Dlatego też wszystkie osoby, które chcą zacząć naukę ze Spring Bootem, zachęcam do obejrzenia w mojego materiału na YouTubie. Krzysiek, jeżeli pozwolisz, to podlinkujemy ten materiał. Jest to wprowadzenie do świata Spring Boota, jak zacząć z nim pracę, a dalej można oczywiście uzupełniać swoją wiedzę w postaci dokumentacji technicznej, która jest świetnie opisana na stronach spring.io.

Jak wspomniałem, napisałem również Spring Boot lifebook. Jest to połączenie książki i demonstracji, bo oprócz treści są tam również materiały wideo, są też testy, które po każdym rozdziale sprawdzają nam wiedzę, więc jest to świetny podręcznik, po to, aby nauczyć się pracować ze Spring Bootem, tudzież ugruntować swoją wiedzę. I, Krzysiek, mam taką sugestię, że dla naszych widzów dzisiaj możemy tę książkę sprezentować. Czy masz może jakiś pomysł, co możemy zrobić, aby nasi słuchacze dzisiaj mogli po prostu te egzemplarze zgarnąć?

 

To jest bardzo fajny pomysł Dziękuję, Przemku. Myślę, że zaproponujemy tego typu niespodziankę, czy też zaproponujemy, żeby słuchacze w swoich kanałach social mediowych może udostępnili ten odcinek, może opowiedzieli o tym odcinku, może w jakiś sposób udostępnili informacje o tym odcinku i podesłali może linka do tego wpisu, który poczynili albo jakieś zdjęcie do mnie na adres krzysztof@porozmawiajmyoit.pl albo przez media społecznościowe. I powiedzmy, że damy na to tydzień czasu od daty publikacji tego odcinka i dwie osoby, które w najfajniejszy sposób polecą tę naszą rozmowę, uhonorujemy Twoją książką. Więc zapraszamy do wzięcia udziału w tej zabawie. Jest do wygrania fajna rzecz, myślę, że przydatna w nauce. Dzięki jeszcze raz, Przemek, za ufundowanie tej nagrody.

 

To jeszcze dodam, że jak będziecie pisać posty na LinkedInie, na Facebooku czy na Instagramie, gdzie będzie wam wygodnie, to pamiętajcie, żeby oznaczyć oczywiście Krzysztofa i mnie. My również weźmiemy udział w Waszych postach, skomentujemy je na pewno i oczywiście, tak jak powiedziałem, mamy dwa egzemplarze, więc egzemplarz wraz z wysyłką na terenie Polski do Waszej dyspozycji, jeżeli tylko i wyłącznie napiszecie ciekawy komentarz, oznaczycie nas i udostępnicie ten temat Spring Boota dalej. Niech edukacja się szczerzy.

 

Przemek, jesteś przykładem na to, że dzielenie się wiedzą to jest fajna rzecz. Ja też się staram tutaj właśnie to uskuteczniać. Bardzo Ci dziękuję za dzisiejszą rozmowę, za to wprowadzenie to Springa, za ufundowanie fajnych nagród. To był naprawdę miło spędzony czas. Dzięki wielkie.

 

Dziękuję Ci, Krzysiek, za zaproszenie. Również Ci dziękuję i podziwiam za to, że osoby takiej jak Ty, które szerzą i budują polskie community, są wśród nas. Pozdrawiam ciepło wszystkich naszych widzów. I oczywiście do zobaczenia!

 

Dzięki serdeczne. To było naprawdę fajnie spędzony czas. Zanim cię wypuszczę, to powiedz jeszcze, gdzie Cię możemy znaleźć w Internecie, gdzie możemy słuchaczy odesłać, żeby mogli Twoje materiały poznać, czegoś się nauczyć.

 

Można mnie znaleźć przede wszystkim na stronie bykowski.pl, to jest moja strona domowa i stamtąd możecie się nawigować do mojego kanału na YouTubie, gdzie co tydzień robię Live Streamy i umieszczam wartościowe materiały, nie tylko i wyłącznie temat Spring Boota, chociaż Spring Boot jest moim sercu, to jednak poruszam się we wszystkich technologiach, które są związane z tworzeniem oprogramowania. Takiego rodzaju tematy, jak np. tworzenie rozwiązań internetowych, jak korzystanie z narzędzi devopsowych. Więc polecam ten kanał wszystkim osobom, które chcą poszerzyć swoją wiedzę na temat tworzenia rozwiązań backendowych.

Polecam też swoją stronę z wydawnictwem Książkowe, to jest strona livebooks.pl i oczywiście na moje inne socjal media, które myślę, że już podlinkujemy pod tym materiałem po to, abyście mogli trafić na mój serwer Discord czy też na moją grupę na Facebooku. Ale zachęcam również do wysłania zaproszenia na LinkedInie, tam możemy poznać się lepiej i być w swoim gronie kontaktów.

 

Super. Oczywiście wszystkie wyniki będą w notce do odcinka. Jeszcze raz bardzo Ci, Przemek, dziękuję.

Do usłyszenia, do zobaczenia. Cześć!

 

Dzięki wielkie, cześć! Pozdrawiam!

 

I to na tyle z tego, co przygotowałem do Ciebie na dzisiaj.

Po więcej wartościowych treści zapraszam Cię do wcześniejszych odcinków. A już teraz, zgodnie z tym, co czujesz, wystaw ocenę, recenzję lub komentarz w aplikacji, której słuchasz lub w social mediach. 

Zawsze możesz się ze mną skontaktować pod adresem krzysztof@porozmawiajmyoit.pl lub przez media społecznościowe.  

Ja się nazywam Krzysztof Kempiński, a to był odcinek podcastu Porozmawiajmy o IT o Spring i Spring Boot. Zapraszam do kolejnego odcinka już wkrótce.

Cześć!

 

+ Pokaż całą transkrypcję
– Schowaj transkrypcję
mm
Krzysztof Kempiński
krzysztof@porozmawiajmyoit.pl

Jestem ekspertem w branży IT, w której działam od 2005 roku. Zawodowo zajmuję się web-developmentem i zarządzaniem działami IT. Dodatkowo prowadzę podcast, kanał na YouTube i blog programistyczny. Moją misją jest inspirowanie ludzi do poszerzania swoich horyzontów poprzez publikowanie wywiadów o trendach, technologiach i zjawiskach występujących w IT.