Niespełna dwa lata temu wpisem Lombok – the boilerplate killer rozpocząłem serię Przybornik Javowca. Miałem nadzieję, że do dziś znajdzie się w nim znacznie więcej narzędzi. Szczególnie, że sam mam na liście kilka, którymi chciałem się podzielić. Jakoś tak się jednak złożyło, że temat zszedł na dalszy plan i przybornik nie rozwinął się zgodnie z oczekiwaniami. Chciałbym to teraz powolutku nadrobić. Zacznę od czegoś, co z pewnością przyda się każdemu zespołowi korzystającemu w swoim projekcie z relacyjnych baz danych. Oto Flyway.

Cykl artykułów "Przybornik Javowca"

Ten wpis jest częścią cyklu, w ramach którego opisuję moje doświadczenia i spostrzeżenia na temat różnego rodzaju sprawdzonych bibliotek, frameworków i innych narzędzi, które pomagają programiście Java w codziennej niedoli :)

Artykuły z tej serii łączą się wyłącznie tematyką i nie są ze sobą mocno związane, a więc spokojnie możesz je czytać wybiórczo. Wszystkie opublikowane do tej pory wpisu znajdziesz poniżej:

  1. Lombok – the boilerplate killer
  2. Flyway – dbaj o swoje relacje
  3. ...

Do czego mi się to przyda?

Rozwijając aplikacje (niekoniecznie) webowe, działające na kilku środowiskach (np. dev, test, staging, prod), które do utrwalenia danych korzystały z relacyjnych baz danych musiał[a|e]ś trafić na problem zachowania spójności schematów bazy pomiędzy poszczególnymi wersjami aplikacji oraz środowiskami. Ile razy dopiero w trakcie klikania na stagingu (a może i na prodzie) okazało się, że w bazie brakuje kolumny, która została dodana w ostatniej wersji i działała poprawnie na dev i test? Sam przyznam, że w czasach pre-Flyway-owych spotkało mnie to kilkukrotnie. Flyway został stworzony właśnie po to, żeby zapobiegać podobnym sytuacjom i służyć do automatycznego zarządzania migracjami schematu (oraz danych jeśli trzeba) relacyjnych baz danych. Twórcy Flyway’a tytułują go systemem kontroli wersji dla Twojej bazy danych i są tak blisko prawdy jak to tylko możliwe 🙂

Jak działa Flyway?

Idea działania jest prosta. Flyway do szczęścia potrzebuje dwóch rzeczy: namiaru na Twoją bazę danych oraz namiaru na miejsce składowania migracji, które ma na tej bazie zaaplikować. Migracje to ni mniej, ni więcej jak odpowiednio nazwane pliki, w których opisane są działania do wykonania na docelowej bazie. W większości przypadków będę to po prostu skrypty SQL zawierające komendy utworzenia lub usunięcia tabeli, dodania/usunięcia kolumny itp. W bardziej skomplikowanych przypadkach można posiłkować się migracjami napisanymi w Javie.

Ogólna zasada działania Flyway’a jest taka, że w trakcie startu (w moim przypadku webowej) aplikacji zbiera on wszystkie znalezione migracje i stara się zaaplikować je po kolei na docelowej bazie danych. Informacje o tym jakie migracje już wykonał przechowuje w specjalnie przygotowanej do tego tabeli (w tej samej bazie). Dzięki temu podczas każdego kolejnego startu aplikacji wykonają się tylko te migracje, które nie zostały odnotowane wcześniej.

Plusy

Jest kilka znaczących plusów korzystania z Flyway’a. Przede wszystkim robi to co do niego należy, czyli rozwiązuje problem wspomnianego rozjazdu schematu baz danych na różnych środowiskach. Jeśli jakaś migracja się nie powiedzie aplikacja po prostu się nie uruchomi, czyli zgodnie z zasadą fail fast o problemach dowiemy się od razu, a nie dopiero kiedyś w trakcie działania aplikacji. Flyway w swojej tabelce przechowuje sumy kontrolne każdego pliku z migracją. Dzięki temu szybko wyłapuje również próby grzebania w starszych, wykonanych już migracjach.

Dobrą wiadomością dla osób pracujących z istniejącymi bazami danych jest fakt, że Flyway działa także z takimi. Obecny stan bazy oznaczamy po prostu jako wyjściowy i dalej działamy już z nowymi migracjami.

Kolejnym plusem z punktu widzenia programisty jest to, że pliki migracji są by design wersjonowane razem z całym kodem aplikacji, a więc łatwo powiązać je ze zmianami wprowadzonymi w kodzie. Łatwo również sprawdzić, że czy dana migracja została już zaaplikowana zaglądając tylko do jednej wyżej wspomnianej tabeli.

Podoba Ci się ten wpis?

Rzuć okiem na mój profil na Patronite.

Minusy

Jedyny większy problem przy korzystaniu z Flyway’a, z którym miałem styczność nie był związany z samym narzędziem, a tym jak różna jest składnia SQL-a w różnych bazach danych. Kiedy na przykład produkcyjnie korzystamy z Oracle’a, a lokalnie chcielibyśmy używać H2, to prędzej czy później obijemy się o różnice w niektórych komendach. Problem jest rozwiązywalny choćby w ten sposób, że dla różnych środowisk możemy określić różne lokalizacje składowania migracji do zaaplikowania. W ten sposób w jednym miejscu przechowujemy te dedykowane dla Oracle’a, a w innym te dla H2. Generuje to nieco niepotrzebnych duplikacji, ale nie wiem czy istnieje tutaj lepsze rozwiązanie.

Źródła

Nie będę się tutaj rozwodził na temat tego jak skonfigurować i używać Flyway’a. Zainteresowanych zachęcam do:

Podsumowanie

Mam nadzieję, że ta krótka zajawka przedstawiająca Flyway’a i pokazująca jakie problemy rozwiązuje, zachęci Cię do pochylenia się nad tym narzędziem. Jeśli korzystasz lub korzystał[a|e]ś z niego w przeszłości, to może masz jakieś ciekawe spostrzeżenia, o których warto wspomnieć? Być może znasz jakieś lepsze/gorsze alternatywy? W każdym przypadku zachęcam do pozostawienia komentarza poniżej 🙂

Bądź na bieżąco!

Podobają Ci się treści publikowane na moim blogu? Nie chcesz niczego pominąć? Zachęcam Cię do subskrybowania kanału RSS, polubienia fanpage na Facebooku, zapisania się na listę mailingową:




Uwaga! Jeżeli w ciągu 24-godzin od zapisania się na listę mailingową nie otrzymasz wybranego przez siebie prezentu to skontaktuj się ze mną.

Zgoda? Zapisując się do newslettera wyrażasz zgodę na przesyłanie Ci starannie wyselekcjonowanych informacji marketingowych. Powyższe dane są przechowywane w systemie MailChimp i nie są udostępniane nikomu więcej.

lub śledzenia mnie na Twitterze. Generalnie polecam wykonanie wszystkich tych czynności, bo często zdarza się tak, że daną treść wrzucam tylko w jedno miejsce. Zawsze możesz zrobić to na próbę, a jeśli Ci się nie spodoba – zrezygnować :)

Dołącz do grup na Facebooku

Chcesz więcej? W takim razie zapraszam Cię do dołączenia do powiązanych grup na Facebooku, gdzie znajdziesz dodatkowe informacje na poruszane tutaj tematy, możesz podzielić się własnymi doświadczeniami i przemyśleniami, a przede wszystkim poznasz ludzi interesujących się tą samą tematyką co Ty.

W grupie Programista Na Swoim znajdziesz wiele doświadczonych osób chętnych do porozmawiania na tematy krążące wokół samozatrudnienia i prowadzenia programistycznej działalności gospodarczej. Vademecum Juniora przeznaczone jest zaś do wymiany wiedzy i doświadczeń na temat życia, kariery i problemów (niekoniecznie młodego) programisty.

Wesprzyj mnie

Jeżeli znalezione tutaj treści sprawiły, że masz ochotę wesprzeć moją działalność online, to zobacz na ile różnych sposobów możesz to zrobić. Niezależnie od tego co wybierzesz, będę Ci za to ogromnie wdzięczny.

Na wsparciu możesz także samemu zyskać. Wystarczy, że rzucisz okiem na listę różnych narzędzi, które używam i polecam. Decydując się na skorzystanie z któregokolwiek linku referencyjnego otrzymasz bonus również dla siebie.

Picture Credits
Tribute to Patrons