JavaRush /Blog Java /Random-PL /SpringBoot + Flyway - „Projekt Java od A do Z”
Roman Beekeeper
Poziom 35

SpringBoot + Flyway - „Projekt Java od A do Z”

Opublikowano w grupie Random-PL
Artykuł z serii o tworzeniu projektu w Javie (linki do innych materiałów znajdują się na końcu). Jego celem jest analiza kluczowych technologii, efektem jest napisanie bota telegramowego. W tej części staramy się uruchomić SpringBoot i Flyway. Minimalna ilość teorii, jak kto lubi))) Pomijamy ostateczne porównanie Flyway/Liquibase na czas nieokreślony i przechodzimy do sedna. A mimo to to już się przeciągnęło. Aby nie opisywać Flywaya dwa razy, postanowiłem od razu dodać go do naszego przyszłego projektu JRTB.„Projekt Java od A do Z”: SpringBoot + Flyway - 1

Co musimy zrobić w ramach tego?

  1. Uruchom aplikację SpringBoot opartą na Maven.
  2. Dodaj tam Flyway: na szczęście można je łatwo zintegrować.
  3. Dodaj schemat dla tabel, które mamy w przykładowej bazie danych.
W ten sposób nauczymy się pracować z Flyway. Dlaczego osobny projekt, a nie od razu do naszego JRTB? Ponieważ później każdy, kto będzie chciał zrozumieć, jak to zrobić, będzie miał projekt z przykładem i artykułem opisującym pracę z nim. Dobrze chodźmy!

Co to jest przelot

Aby czegoś użyć, musisz najpierw dowiedzieć się, co to jest i dlaczego. Flyway to narzędzie do kontroli wersji bazy danych. Słowa są dobrze znane, ale jakoś nie dodano ich zrozumienia, prawda? Spróbujmy opisać problem, który rozwiązuje flyway. Powiedzmy, że mamy projekt. Jak wszystko w naszym świecie, nie jest on idealny, dlatego nie było możliwości zaplanowania i sporządzenia ostatecznej wersji projektu. Za każdym razem pojawiają się pewne niezliczone niuanse. Projekt wykorzystuje w swojej pracy bazę danych. Oczywiście w przypadku zmiany projektu może zmienić się również struktura bazy danych. Załóżmy, że dodajemy nowe pole dla jednego z encji w naszym projekcie. Jak to zrobić?
  1. Dodaj to pole do naszej encji, zaktualizuj wszystko tak, aby logika biznesowa działała.
  2. Zaktualizuj bazę danych. Jedynym możliwym sposobem jest zrobienie tego ręcznie. Aby to zrobić, musisz wejść i zarejestrować niezbędny skrypt sql.
Drugi punkt rodzi wiele pytań:
  1. Jeśli jednak mamy więcej niż jedno miejsce, w którym realizujemy nasz projekt, to czy trzeba to robić w każdym z nich?
  2. a jeśli chcemy wrócić, skąd mamy dokładnie wiedzieć, w jakim stanie jest teraz struktura bazy danych?
  3. Skąd będziemy mieć pewność, że zmiana bazy danych przebiegła pomyślnie?
  4. Jak uzyskać możliwość śledzenia wszystkich zmian w bazie danych, które miały miejsce w projekcie?
Jeśli zrobisz to ręcznie, odpowiedzi nie będą najlepsze... Aby uniknąć tych wszystkich trudności, możesz skorzystać z narzędzia do migracji bazy danych. Jednym z nich jest Flyway. Jaka jest jego praca? W ramach projektu przechowujemy osobne pliki sql (tzw. migracje), w których przechowujemy wszystko, co robimy z bazą danych w jednym czasie. Wszystkie migracje odbywają się ściśle w określonej kolejności, co pozwala na śledzenie zmian w strukturze i danych bazy danych (często przy pomocy migracji do projektu dodawane są dane testowe, tak aby po wdrożeniu na jakiś serwer miał już jakieś wartości, za pomocą których można testować projekt). Po przejściu testów, w momencie budowy projektu uruchamiane są migracje. Łączą się z bazą danych i wykonują migracje. Jeśli w tej bazie były już przeprowadzane migracje, flyway po prostu je pominie (przechowuje dane o migracjach i ich statusie w osobnej tabeli w bazie, co pomaga nimi zarządzać), a jeśli jakaś migracja się nie powiodła, to projekt kompilacja i jej montaż (wdrożenie) na serwerze zostanie zatrzymany. Starałem się to opisać możliwie szczegółowo. Jeśli wszystko nadal nie jest do końca jasne, nie ma to znaczenia: wraz z praktyką przyjdzie zrozumienie.

Uruchom SpringBoot + Flyway

Co to jest Spring Boot

Co uruchamiamy?... Aby zrozumieć, co i dlaczego robimy, musisz zdecydować, czym jest SpringBoot. Najpierw porozmawiajmy szybko (no cóż, bardzo szybko) o wiośnie . W tej chwili jest to de facto standard branżowy w tworzeniu aplikacji serwerowych w Javie. Standard czego? Jak mogę ci to wyjaśnić? Spring to szkielet aplikacji, na który następnie wrzucamy „mięso” – naszą logikę biznesową. Z pomocą Springa (dalej będę korzystał z tej kalki, żeby nie tracić czasu na przełączanie języków :D)) Wiosna daje nam początek, od którego zaczynamy wszystko. Jest wieloaspektowy, wielomodułowy:
  1. Chcesz pracować z bazą danych? Czy chcesz relacji? Czy chcesz być nierelacyjny? Oto jesteśmy z Spring Data.
  2. Czy chcesz pracować z żądaniami http? Proszę bardzo, Spring Web (Spring MVC).
  3. Potrzebujesz kontenera na wszystkie swoje przedmioty w jednym miejscu? Oto wiosenny rdzeń.
  4. Czy musisz skonfigurować zabezpieczenia projektu, aby istniały różne role i łańcuch dowodzenia? Wiosenne bezpieczeństwo.
  5. Kiedy już pomyślałeś, że fajnie byłoby mieć coś takiego, okazuje się, że Spring ma już to, czego potrzebujesz i integruje się szybko i łatwo.
Można zatem powiedzieć, że to nie tylko framework (tak ogromna biblioteka), ale cały ekosystem, który rozwija się w zawrotnym tempie. Aby zrozumieć czym jest Spring Core, czyli baza do której podłączane są moduły, radzę obejrzeć demo na żywo dotyczące tworzenia własnego frameworka. Prowadzi go Evgeny Borisov, bardzo fajny facet w dziedzinie Java i Spring. Zrób wszystko, co on zrobił, a dzieło wiosny stanie się dla ciebie jaśniejsze. SpringBoot z kolei to szczyt wszystkiego, co mają. Magia czystej wody. Minimalne ustawienia umożliwiające pierwsze uruchomienie aplikacji. Oczywiście nie da ci to zrozumienia, jak z niego korzystać i co robić. Ale zanim zagłębisz się w rozwój, musisz spojrzeć na wszystko z lotu ptaka.

Uruchamianie SpringBoota

Skoro już zrozumieliśmy czym jest Maven, stwórzmy nowy projekt na nasze potrzeby. Aby to zrobić, wystarczy udać się na specjalnie stworzoną w tym celu stronę internetową. Nazywa się Spring Inicjalizator . „Projekt Java od A do Z”: SpringBoot + Flyway - 2Tutaj musisz wypełnić i wybrać to, czego potrzebujesz:
  1. Narzędziem do tworzenia projektu jest gradle lub maven. Jak widać, o Ancie już nawet nie ma mowy. To dobra wskazówka, które narzędzia do budowania są warte Twojego czasu.
  2. Język, w którym możesz pisać, to Java, Kotlin, Groovy. Tutaj wszystko jest proste: wszystkie są podobne do JVM i łatwo uruchamiają kod Java. Swoją drogą warto zajrzeć do Kotlina. Groovy szczerze mówiąc przestało być interesujące (był czas, kiedy przeszli na rytmy, ale szybko to minęło).
  3. Wersja wiosenna... Tutaj musisz zrozumieć, że wersje głównej części Springa i jego modułów są spójne.
  4. Dane projektu. Opisałem już te rzeczy.
  5. Wybieramy, które archiwum będzie gromadzone - Jar czy Wojna.
  6. Cóż, wersja Java naszej ulubionej. A ostatnio tych wersji było mnóstwo... Czekały lata, a teraz są dwie rocznie.
W naszym przypadku opublikujemy ten projekt w organizacji JavaRush Community , więc informacje o projekcie będą odpowiednie:
  1. Maven – nie bez powodu rozmawialiśmy z Tobą o tym wcześniej.
  2. Java to nasza ukochana :D
  3. Weźmy wersję 2.2.11. Dlaczego nie najnowszy? Bo im jest nowszy, tym większa szansa, że ​​mogą znaleźć się tam jakieś błędy. Dla nas nie ma znaczenia, która wersja, ale ta starsza będzie bardziej niezawodna. Dlatego wybieramy 2.2.11.
  4. Grupa: com.github.javarushcommunity
  5. Artefakt: wersja demo springboot-flyway
  6. Nazwa: SpringBoot + wersja demonstracyjna Flyway
  7. Opis: Projekt demonstruje integrację SpringBoot i Flyway . (Tak, umiejętność pisania dokumentacji jest ważną częścią rozwoju :))
  8. Nazwa pakietu: com.github.javarushcommunity.springbootflywaydemo . Tutaj od razu stworzą dla nas podstawowy pakiet z klasą, która uruchomi naszą aplikację.
  9. Opakowanie: Słoik
  10. Java: 8. Nie wyprzedzajmy lokomotywy i bierzmy starą, dobrą ósemkę. Dlaczego nie 11? Po co? W naszym przykładzie nie widzę sensu.
„Projekt Java od A do Z”: SpringBoot + Flyway - 3Teraz dodajmy moduły. Musimy znaleźć integrację z Flyway. Możesz także dodać coś związanego z MySQL i Spring Data. Dodajmy kolejny lombok (jest to bardzo potrzebna rzecz, na razie zaufaj mi :D)) Aby to zrobić, kliknij DODAJ ZALEŻNOŚCI ... i zaznacz wszystko, czego potrzebujesz: „Projekt Java od A do Z”: SpringBoot + Flyway - 4W ten sposób dodajemy Flyway. „Projekt Java od A do Z”: SpringBoot + Flyway - 5Lombok... I tak dalej. W rezultacie otrzymujemy: „Projekt Java od A do Z”: SpringBoot + Flyway - 6Huh... wypełniliśmy wszystko)) Teraz klikamy GENERUJ... i gotowe - archiwum z wygenerowanym projektem gotowe :) Jest też taka fajna rzecz jak UDOSTĘPNIJ... , co daje link do strony, którą właśnie wypełniłeś. To znaczy, oto ten, który wygenerowałem . A nawet jeśli coś pójdzie nie tak, zawsze możesz to sprawdzić korzystając z linku. Następnie musimy połączyć utworzony projekt z repozytorium Git, zatem klonujemy utworzony projekt springboot-flyway-demo i pobieramy go poprzez IDEA. Aby to zrobić, musisz otworzyć pomysł i wybrać Plik -> Nowy -> Projekt z istniejących źródeł... : „Projekt Java od A do Z”: SpringBoot + Flyway - 7Teraz dodaj adres URL i kliknij Klonuj . Następnym krokiem jest przeniesienie elementów wygenerowanego projektu do tego, który sklonowaliśmy. Zdezorientowany? Pokażę ci teraz. Rozpakowałem go i otrzymałem następujący zestaw plików: „Projekt Java od A do Z”: SpringBoot + Flyway - 8Należy je przenieść do sklonowanego projektu. Podobnie jak w poprzednim artykule, dodajmy pom.xml jako projekt maven: „Projekt Java od A do Z”: SpringBoot + Flyway - 9Teraz jesteśmy zainteresowani obejrzeniem tego, co zostało dla nas wygenerowane. Jeśli otworzysz wszystkie foldery w src i dalej, zobaczysz zwykłą hierarchię w projektach Maven, o której mówiliśmy w poprzednim artykule . Kto nie czytał, niech przeczyta! „Projekt Java od A do Z”: SpringBoot + Flyway - 10Widać, że mamy klasę Application i za jej pomocą zostanie uruchomiona nasza aplikacja SpringBoot. Dzięki wtyczce Maven dla SpringBoot mamy teraz zadanie, którego potrzebujemy dla Mavena, a mianowicie spring-boot:run. Gdzie możemy znaleźć te informacje? Po prawej otwieramy płytkę Mavena i nasz projekt: „Projekt Java od A do Z”: SpringBoot + Flyway - 11Wystąpi błąd i nie będziemy mogli go odczytać, zobaczymy coś takiego: „Projekt Java od A do Z”: SpringBoot + Flyway - 12Aby uzyskać więcej informacji, dla szybkości możemy uruchomić główną metodę klasa aplikacji: „Projekt Java od A do Z”: SpringBoot + Flyway - 13A wtedy zobaczymy prawdziwy powód: „Projekt Java od A do Z”: SpringBoot + Flyway - 14Tutaj już jest więcej informacji i możesz coś z tym zrobić. Co jest nie tak? Mamy zależności powiązane z bazą danych i dlatego musimy podać ustawienia umożliwiające połączenie się z nią. Aby to zrobić, wyszukujemy w Google i stwierdzamy, że musimy dodać następujące konfiguracje do application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/flyway_demo_db
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
Uruchamiamy ponownie główną metodę i otrzymujemy: „Projekt Java od A do Z”: SpringBoot + Flyway - 15Teraz musimy dodać przynajmniej jedną migrację. Aby poprawnie skomponować migrację należy pobrać następujący szablon: V<VERSION>__<NAZWA>.sql Korzystając z tego szablonu utworzymy plik migracji o nazwie V00001__Create_country_table.sql w odpowiednim folderze: /src/main/resources/ db.migracja/ . Stwórzmy w nim tabelę krajów. Weźmy skrypt z drugiego artykułu o bazie danych . „Projekt Java od A do Z”: SpringBoot + Flyway - 16Zanim zaczniemy, wejdźmy i utwórzmy bazę danych do pracy: flyway_demo_db. Zróbmy to za pomocą MysqlWorkbench: „Projekt Java od A do Z”: SpringBoot + Flyway - 17Teraz możemy ponownie uruchomić główną metodę: „Projekt Java od A do Z”: SpringBoot + Flyway - 18Wszystko się udało, ale ponieważ nie mamy jeszcze niczego w projekcie, zakończyło się to. Jednak z logów jasno wynika ( czytaj jakie to logi ) że:
  1. Pomyślnie połączono z bazą danych.
  2. Migracja została sprawdzona i wszystko jest w porządku.
  3. Flyway stworzył tabelę do zarządzania migracjami.
  4. I od czego zaczęła się migracja 00001 - utworzenie kraju przebiegło pomyślnie.
Aby to sprawdzić, możesz przejść i zobaczyć, co dzieje się w bazie danych. Przejdźmy więc do naszego serwera MySQL i zobaczmy co się dzieje z tabelami w bazie flyway_demo_db: $ USE flyway_demo_db; $POKAŻ TABELE; „Projekt Java od A do Z”: SpringBoot + Flyway – 19Tak jak się spodziewałem nastąpiła migracja, podczas której została utworzona tabela country i pojawiła się tabela flyway_schema_history przechowująca informacje o migracjach. Pójdźmy dalej i zobaczmy, jakie są tam rekordy (i czy w ogóle jakieś są). $WYBIERZ * Z historii_schematu_przelotu; „Projekt Java od A do Z”: SpringBoot + Flyway – 20Oto nagranie, jedyne. Zawiera wiele ciekawych danych. Wersja, opis migracji, jaki typ SQL (a może i XML), nazwa samego skryptu, suma kontrolna ( to coś w rodzaju hashcode, który służy do sprawdzenia, czy migracja się zmieniła, czy nie. Odbywa się to w przypadku, gdy przeprowadziliśmy migrację w bazie danych, a następnie została ona poprawiona: nie można tego zrobić, wszystkie zmiany wprowadzane są tylko poprzez nową migrację i aby temu zapobiec, kwota czeku monitoruje to), nazwa użytkownika sql, przetwarzanie migracji data, czas wykonania i wynik (udany lub nieudany). Raz zapisanej migracji nie należy zmieniać w przyszłości. Nawet jeśli jest w nim jakaś wada. Wszelkie zmiany zachodzą jedynie poprzez nową migrację. To jest bardzo ważne. Aby pokazać, co się stanie, zmieńmy trochę nasz skrypt i spróbujmy uruchomić go ponownie. Dodajmy jeden wpis do tabeli krajów w naszej migracji: „Projekt Java od A do Z”: SpringBoot + Flyway – 21i uruchommy metodę main i oto co otrzymamy: „Projekt Java od A do Z”: SpringBoot + Flyway – 22Tak jak się spodziewałem, flyway rozpoznał, że skrypt został zmieniony i nie przeprowadził migracji. W niektórych przypadkach może być konieczne przeprowadzenie zaktualizowanej migracji i aby flyway to pominął, musisz usunąć wpis w tabeli flyway_schema_history, a następnie uruchomić zaktualizowaną migrację. Nie jest to normalne zachowanie i nie powinno tak być, ale warto poznać także tę metodę rozwiązania problemu. Zajęliśmy się pierwszą migracją. Teraz chciałbym dodać kolejną migrację, z danymi o krajach, tak jak było w artykule o bazie danych: plik V00002__Add_test_data_to_country.sql„Projekt Java od A do Z”: SpringBoot + Flyway – 23 I jeszcze raz uruchommy główną metodę: „Projekt Java od A do Z”: SpringBoot + Flyway – 24Z logów wynika, że ​​przed rozpoczęciem migracji baza danych była w wersji 00001, więc wszystkie migracje po tej wersji. Następnie uruchomiono wersję 00002, która zakończyła się sukcesem. Sprawdźmy, czy już mi wierzycie, że w bazie będą już trzy rekordy z kraju?)) Ja bym sprawdził, więc dowód: „Projekt Java od A do Z”: SpringBoot + Flyway – 25Coś w tym stylu. Jeśli uruchomisz projekt ponownie, flyway po prostu pominie wdrażanie migracji, ponieważ baza danych jest w pełni zgodna z wymaganą wersją.

Wniosek

Tym razem nauczyliśmy się rozumieć i używać narzędzia do migracji baz danych w połączeniu ze SpringBoot. Informacje te są niezbędne, aby zrozumieć, czym jest narzędzie kontroli wersji bazy danych, na przykładzie Flyway. Przyjaciele, kod źródłowy projektu, który pokazałem, został opublikowany w naszej organizacji na Githubie . Jeśli podoba Ci się przykład, daj mu gwiazdkę , a zrozumiem, że moja praca jest przydatna i naprawdę warta kontynuacji. Tradycyjnie proponuję subskrybować moje konto Github . Za jego pośrednictwem prowadzę całą moją pracę nad oprogramowaniem open source i wszystkimi projektami demonstracyjnymi, które niezmiennie towarzyszą moim artykułom. Dziękuję wszystkim za przeczytanie. Następnym razem napiszemy naszą aplikację. W przyszłości będzie pewna niezbędna teoria na temat Dockera, ale mocno ją osłabimy praktyką.

Przydatne linki

Dziś nie ma zbyt wielu przydatnych linków. Zwróćcie uwagę na film Evgeniy'a, naprawdę warto!
  1. Strona do tworzenia projektów na Springu
  2. Evgeniy Borisov — budowniczy wiosny
  3. Dokumentacja na wiosnę dla Flyway

Lista wszystkich materiałów wchodzących w skład serii znajduje się na początku artykułu.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION