JavaRush /Java Blogu /Random-AZ /SpringBoot + Flyway - "A-dan Z-yə Java layihəsi"
Roman Beekeeper
Səviyyə

SpringBoot + Flyway - "A-dan Z-yə Java layihəsi"

Qrupda dərc edilmişdir
Java layihəsinin yaradılması haqqında silsilədən məqalə (digər materiallara keçidlər sonundadır). Onun məqsədi əsas texnologiyaları təhlil etməkdir, nəticə teleqram botunu yazmaqdır. Bu hissədə SpringBoot və Flyway-i işə salmağa çalışırıq. Nəzəriyyənin minimum miqdarı, istədiyiniz kimi))) Flyway/Liquibase-in son müqayisəsini qeyri-müəyyən müddətə buraxırıq və nöqtəyə çatırıq. Və buna baxmayaraq, artıq uzanıb. Flyway-i iki dəfə təsvir etməmək üçün onu dərhal gələcək JRTB layihəmizə əlavə etmək qərarına gəldim."A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 1

Bunun bir hissəsi olaraq nə etməliyik?

  1. Maven əsasında SpringBoot tətbiqini işə salın.
  2. Orada Flyway əlavə edin: xoşbəxtlikdən, onlar asanlıqla inteqrasiya olunur.
  3. Nümunə verilənlər bazasında mövcud olan cədvəllər üçün bir sxem əlavə edin.
Bu yolla biz Flyway ilə işləməyi öyrənəcəyik. Niyə dərhal JRTB-mizə deyil, ayrı bir layihə? Çünki daha sonra bunu necə edəcəyini anlamaq istəyən hər kəsin nümunə ilə bir layihəsi və onunla işləməyi təsvir edən məqaləsi olacaq. Yaxşı, gedək!

Flyway nədir

Bir şeyi istifadə etmək üçün əvvəlcə onun nə olduğunu və niyə olduğunu anlamaq lazımdır. Flyway verilənlər bazası versiyasına nəzarət vasitəsidir. Sözlər məlumdur, amma nədənsə anlayış əlavə olunmayıb, hə? Gəlin uçuş yolunun həll etdiyi problemi təsvir etməyə çalışaq. Tutaq ki, bir layihəmiz var. Dünyamızdakı hər şey kimi, mükəmməl deyil, ona görə də layihənin son variantını planlaşdırmaq və tərtib etmək mümkün deyildi. Hər dəfə müəyyən hesablanmayan nüanslar ortaya çıxır. Layihə öz işində verilənlər bazasından istifadə edir. Təbii ki, layihə dəyişərsə, verilənlər bazası strukturu da dəyişə bilər. Tutaq ki, layihəmizdəki obyektlərdən biri üçün yeni sahə əlavə edirik. Bunu necə etmək olar?
  1. Bu sahəni müəssisəmizə əlavə edin, biznes məntiqinin işləməsi üçün hər şeyi yeniləyin.
  2. Verilənlər bazasını yeniləyin. Yeganə mümkün yol bunu əl ilə etməkdir. Bunun üçün siz daxil olub lazımi sql skriptini qeydiyyatdan keçirməlisiniz.
İkinci məqam bir çox sual doğurur:
  1. Ancaq layihəmizi yerləşdirdiyimiz birdən çox yerimiz varsa, bunların hər birində bunu etmək lazımdırmı?
  2. və əgər geri qayıtmaq istəsək, verilənlər bazası strukturunun hazırda hansı vəziyyətdə olduğunu dəqiq necə bilə bilərik?
  3. Verilənlər bazası dəyişikliyinin uğurlu olduğuna necə əmin ola bilərik?
  4. Layihədə baş verən bütün verilənlər bazası dəyişikliklərini izləmək fürsətini necə əldə edə bilərəm?
Bunu əl ilə etsəniz, cavablar ən yaxşı olmayacaq... Bütün bu çətinliklərdən qaçmaq üçün verilənlər bazası köçürmə alətindən istifadə edə bilərsiniz. Bunlardan biri də Flyway-dir. Onun işi nədir? Layihənin bir hissəsi olaraq biz verilənlər bazası ilə etdiyimiz hər şeyi bir anda saxlayan ayrı sql fayllarını (miqrasiya adlanır) saxlayırıq. Bütün köçlər ciddi şəkildə müəyyən bir ardıcıllıqla baş verir ki, bu da verilənlər bazasının strukturunda və məlumatlarında dəyişiklikləri izləməyə imkan verir (tez-tez miqrasiyadan istifadə edərək, test məlumatları layihəyə əlavə olunur ki, hansısa serverə yerləşdirildikdə artıq müəyyən layihəni sınaqdan keçirə biləcəyiniz dəyərlər). Sınaqlardan keçdikdən sonra layihə tikilən zaman köçlər başlayır. Onlar verilənlər bazasına qoşulur və köçürmələri həyata keçirirlər. Əgər miqrasiya bu verilənlər bazasında artıq həyata keçirilibsə, onda uçuş yolu onları sadəcə ötürəcək (miqrasiya və onların statusu haqqında məlumatları verilənlər bazasında ayrıca cədvəldə saxlayır, bu da onları idarə etməyə kömək edir) və bəzi miqrasiya uğursuz olarsa, o zaman layihə qurmaq və onun serverə quraşdırılması (yerləşdirilməsi) dayanacaq. Onu mümkün qədər ətraflı təsvir etməyə çalışdım. Hər şey hələ də tam aydın deyilsə, fərq etməz: təcrübə ilə anlayış gələcək.

SpringBoot + Flyway-i işə salın

Spring Boot nədir

Nə işə salırıq?... Nə və nə üçün etdiyimizi anlamaq üçün SpringBoot-un nə olduğuna qərar verməlisiniz. Birincisi, tez (yaxşı, çox tez) Bahar haqqında danışaq . Hal-hazırda, Java-da server proqramlarının hazırlanmasında faktiki sənaye standartıdır. Nəyin standartı? Bunu sizə necə izah edim? Bahar tətbiqin skeletidir, onun üzərinə "ət" atırıq - iş məntiqimiz. Baharın köməyi ilə (bundan sonra dilləri dəyişdirməyə vaxt itirməmək üçün bu izləmə kağızından istifadə edəcəyəm :D)) Bahar bizə hər şeyi etməyə başladığımız bir başlanğıc verir. Çoxşaxəli , çox modulludur:
  1. Verilənlər bazası ilə işləmək istəyirsiniz? Münasibət istəyirsiniz? Siz qeyri-münasibət istəyirsiniz? Budur Spring Data ilə.
  2. http sorğuları ilə işləmək istəyirsiniz? Budur, Spring web (Bahar MVC).
  3. Bütün obyektləriniz üçün bir yerdə konteynerə ehtiyacınız varmı? Budur Spring Core.
  4. Fərqli rollar və komanda zənciri olması üçün bir layihədə təhlükəsizlik qurmaq lazımdırmı? Bahar Təhlükəsizliyi.
  5. Məhz belə bir şeyə sahib olmağın gözəl olacağını düşünəndə belə çıxır ki, Bahar artıq sizə lazım olan şeylərə malikdir və o, tez və asanlıqla inteqrasiya olunur.
Buna görə də deyə bilərik ki, bu, sadəcə bir çərçivə (belə bir nəhəng kitabxana) deyil, bütöv bir ekosistemdir və yüksək sürətlə inkişaf edir. Spring Core-un nə olduğunu, yəni modulların qoşulduğu bazanı başa düşmək üçün sizə öz çərçivənizi yaratmaq üçün canlı demo izləməyi məsləhət görürəm. Evgeni Borisov, Java və Bahar sahəsində çox sərin oğlandır. Onun etdiyi hər şeyi edin və baharın işi sizə daha aydın olacaq. SpringBoot, öz növbəsində, sahib olduqları hər şeyin zirvəsidir. Təmiz suyun sehri. Tətbiqin ilk işə salınması üçün minimum parametrlər. Əlbəttə ki, bu, necə istifadə edəcəyiniz və nə edəcəyiniz barədə bir anlayış verməyəcək. Ancaq inkişafın dərinliklərinə tələsməzdən əvvəl hər şeyə quş baxışı ilə baxmaq lazımdır.

SpringBoot işə salınır

Maven-in nə olduğunu artıq başa düşdüyümüz üçün ehtiyaclarımız üçün yeni bir layihə yaradaq. Bunun üçün sadəcə olaraq bu məsələ üçün xüsusi yaradılmış vebsayta daxil olmaq kifayətdir. Bu, Spring Initializr adlanır . "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 2Burada sizə lazım olanı doldurmalı və seçməlisiniz:
  1. Layihə qurma aləti gradle və ya mavendir. Gördüyünüz kimi, artıq Qarışqanın adı belə çəkilmir. Bu, hansı tikinti alətlərinin vaxtınıza dəyər olduğuna dair yaxşı bir işarədir.
  2. Yaza biləcəyiniz dil java, kotlin, groovy-dir. Burada hər şey sadədir: hamısı JVM-ə bənzəyir və Java kodunu asanlıqla idarə edir. Yeri gəlmişkən, Kotlin-ə baxmağa dəyər. Groovy açıq şəkildə maraqsız oldu (bir vaxtlar yivlərə keçdilər, amma tez keçdi).
  3. Bahar versiyası... Burada Baharın əsas hissəsinin və onun modullarının versiyalarının ardıcıl olduğunu başa düşmək lazımdır.
  4. Layihə məlumatları. Mən artıq bunları təsvir etmişəm.
  5. Hansı arxivin toplanacağını seçirik - Jar və ya War.
  6. Yaxşı, bizim sevimli Java versiyası. Və son vaxtlar bu versiyalar çox olub... İllərlə gözlədilər, indi isə ildə iki olur.
Bizim vəziyyətimizdə bu layihəni JavaRush İcma təşkilatında dərc edəcəyik , buna görə də layihə haqqında məlumat uyğun olacaq:
  1. Maven - bu barədə əvvəllər sizinlə danışmağımız əbəs yerə deyil.
  2. Java bizim sevgilimizdir :D
  3. 2.2.11 versiyasını götürək. Niyə ən yenisi olmasın? Çünki nə qədər yenidirsə, orada bəzi səhvlərin olma şansı bir o qədər yüksəkdir. Bizim üçün hansı versiyanın əhəmiyyəti yoxdur, amma köhnəsi daha etibarlı olacaq. Buna görə də biz 2.2.11-i seçirik.
  4. Qrup: com.github.javarushcommunity
  5. Artefakt: springboot-flyway-demo
  6. Adı: SpringBoot + Flyway Demo
  7. Təsvir: Layihə SpringBoot və Flyway arasında inteqrasiyanı nümayiş etdirir . (Bəli, sənədləri yazmaq bacarığı inkişafın vacib hissəsidir :))
  8. Paketin adı: com.github.javarushcommunity.springbootflywaydemo . Burada dərhal tətbiqimizi işə salacaq bir siniflə bizim üçün əsas paket yaradacaqlar.
  9. Qablaşdırma: banka
  10. Java: 8. Gəlin, lokomotivdən qabağa getməyək və yaxşı köhnə səkkizi götürməyək. Niyə 11 deyil? Nə üçün? Nümunəmiz üçün, mən nöqtə görmürəm.
"A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 3İndi modulları əlavə edək. Biz Flyway ilə inteqrasiya tapmalıyıq. Siz həmçinin MySQL və Spring Data ilə əlaqəli bir şey əlavə edə bilərsiniz. Gəlin başqa bir lombok əlavə edək (bu çox lazımlı bir şeydir, hələlik mənə etibar edin :D)) Bunun üçün ADD DEPENDENCIES ... üzərinə klikləyin və sizə lazım olan hər şeyi seçin: "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 4Flyway-i belə əlavə edirik. "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 5Lombok... Və s. Nəticədə əldə edirik: "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 6Hə... hər şeyi doldurduq)) İndi GENERATE düyməsini sıxın... və bu qədər - yaradılan layihə ilə arxiv hazırdır :) PAYLAŞ... kimi gözəl bir şey də var . bu sizə indicə doldurduğunuz səhifəyə keçid verir. Yəni mənim yaratdığım budur . Və bir şey səhv getsə belə, həmişə linkdən istifadə edərək yoxlaya bilərsiniz. Sonra, yaradılmış layihəni Git repozitoriyası ilə əlaqələndirməliyik, ona görə də yaradılmış springboot-flyway-demo layihəsini klonlayırıq və IDEA vasitəsilə yükləyirik. Bunun üçün siz ideyanı açmalı və Fayl -> Yeni -> Mövcud Mənbələrdən Layihə seçməlisiniz... : "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 7İndi URL-i əlavə edin və Klonla vurun . Növbəti addım, yaradılan layihənin daxili hissələrini klonladığımız layihənin içərisinə köçürməkdir. Qarışıq? İndi sizə göstərəcəyəm. Mən onu açdım və aşağıdakı fayl dəstini aldım: "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 8Bunlar klonlanmış layihəyə köçürülməlidir. Əvvəlki məqalədə olduğu kimi, maven layihəsi kimi pom.xml əlavə edək: "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 9İndi bizim üçün yaradılanlara baxmaqda maraqlıyıq. Bütün qovluqları src və daha sonra açsanız, əvvəlki məqalədə müzakirə etdiyimiz Maven layihələrində adi iyerarxiyanı görəcəksiniz . Oxumayanlar oxusun! "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 10Görünür ki, bizim Tətbiq sinifimiz var və SpringBoot tətbiqimiz ondan istifadə edilərək işə salınacaq. SpringBoot üçün Maven plagini sayəsində indi Maven üçün lazım olan tapşırığımız var, yəni spring-boot:run. Bu məlumatı haradan tapa bilərik? Sağda, Maven boşqabını və layihəmizi açırıq: "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 11Səhv olacaq və biz onu oxuya bilməyəcəyik, buna bənzər bir şey görəcəyik: "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 12Daha çox məlumat əldə etmək üçün sürət üçün əsas metodu işlədə bilərik. Tətbiq sinfindən: "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 13Və sonra əsl səbəbi görəcəyik: "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 14Burada artıq daha çox məlumat var və siz onunla nəsə edə bilərsiniz. Səhv nədir? Verilənlər bazası ilə əlaqəli asılılıqlarımız var və buna görə də ona qoşulmaq üçün parametrləri təmin etməliyik. Bunun üçün biz google-da axtarış edirik və tapırıq ki, application.properties-ə aşağıdakı konfiqurasiyaları əlavə etməliyik:
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
Yenidən əsas metodu işə salırıq və əldə edirik: "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 15İndi ən azı bir miqrasiya əlavə etməliyik. Miqrasiyanı düzgün yaratmaq üçün aşağıdakı şablonu götürməlisiniz: V<VERSION>__<NAME>.sql Bu şablondan istifadə edərək, müvafiq qovluqda V00001__Create_country_table.sql adlı miqrasiya faylı yaradacağıq : /src/main/resources/ db.migration/ . Gəlin orada ölkə cədvəli yaradaq. Verilənlər bazası haqqında ikinci məqalədən skripti götürək . "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 16Başlamazdan əvvəl gəlin daxil olaq və iş üçün verilənlər bazası yaradaq: flyway_demo_db. Gəlin bunu MysqlWorkbench vasitəsilə edək: "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 17İndi əsas metodu yenidən işə sala bilərik: "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 18Hər şey alındı, lakin layihədə hələ heç nə olmadığına görə o, işləməyi başa çatdırdı. Bununla belə, qeydlərdən aydın olur ki ( logların nə olduğunu oxuyun ) ki:
  1. Verilənlər bazasına uğurla qoşuldu.
  2. Miqrasiya təsdiqləndi və hər şey qaydasındadır.
  3. Flyway miqrasiyaları idarə etmək üçün cədvəl yaratdı.
  4. Və hansı miqrasiya 00001 başladı - ölkənin yaradılması uğurlu oldu.
Bunu yoxlamaq üçün gedib verilənlər bazasında nələrin edildiyini görə bilərsiniz. Beləliklə, gəlin MySQL serverimizə gedək və flyway_demo_db verilənlər bazasındakı cədvəllərlə nə baş verdiyini görək: $ USE flyway_demo_db; $CƏDVƏLLƏRİ GÖSTƏRİN; "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 19Gözlədiyim kimi, miqrasiya baş verdi, bu müddət ərzində ölkə cədvəli yaradıldı və miqrasiya haqqında məlumatları saxlayan flyway_schema_history cədvəli peyda oldu. Gəlin daha da irəli gedək və görək hansı qeydlər var (və ümumiyyətlə varmı). $SEÇ * FROM flyway_schema_history; "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 20Budur səsyazma, yeganədir. Çox maraqlı məlumatları ehtiva edir. Versiya, miqrasiyanın təsviri, hansı növ SQL (və bəlkə də XML), skriptin özü, yoxlama məbləği ( bu, miqrasiyanın dəyişib-dəyişmədiyini yoxlamaq üçün istifadə olunan heşkod kimi bir şeydir. Bu edilir. əgər verilənlər bazasında köçürmə həyata keçirmişiksə və sonra düzəldilibsə: bunu etmək mümkün deyil, bütün dəyişikliklər yalnız yeni miqrasiya vasitəsilə edilir və bunun baş verməməsi üçün çek məbləği buna nəzarət edir ) , istifadəçi sql adı, miqrasiya emalı tarixi, icra vaxtı və nəticəsi (uğurlu və ya uğursuz) . Bir dəfə yazılmış miqrasiya gələcəkdə dəyişdirilməməlidir. Onda bir qüsur olsa belə. Bütün dəyişikliklər yalnız yeni miqrasiya vasitəsilə baş verir. Bu çox vacibdir. Nə olacağını göstərmək üçün skriptimizi bir az dəyişdirək və yenidən işə salmağa çalışaq. Miqrasiyamızda ölkə cədvəlinə bir giriş əlavə edək: "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 21və əsas metodu işə salın və əldə etdiyimiz budur: "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 22Gözlədiyim kimi, flyway skriptin dəyişdirildiyini tanıdı və köçürməni həyata keçirmədi. Bəzi hallarda, həqiqətən yenilənmiş miqrasiyanı həyata keçirmək lazım ola bilər və flyway-in bunu atlaması üçün siz flyway_schema_history cədvəlindəki qeydi silməli və sonra yenilənmiş miqrasiyanı həyata keçirməlisiniz. Bu normal davranış deyil və belə olmamalıdır, ancaq problemi həll etməyin bu üsulu haqqında da bilmək lazımdır. İlk köçlə məşğul olduq. İndi verilənlər bazası haqqında məqalədə olduğu kimi ölkələr haqqında məlumatlarla başqa bir miqrasiya əlavə etmək istərdim: fayl V00002__Add_test_data_to_country.sql"A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 23 Və əsas metodu yenidən işə salaq: "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 24Qeydlərdən aydın olur ki, miqrasiya başlamazdan əvvəl verilənlər bazası 00001 versiyasında, buna görə də bu versiyadan sonra bütün köçlər. Sonra 00002 versiyası işə salındı ​​və uğurlu oldu. Gəlin yoxlayaq, yoxsa ölkədə üç qeydin artıq verilənlər bazasında olacağına inanırsınız?)) Yoxlayırdım, sübut: "A-dan Z-yə Java layihəsi": SpringBoot + Flyway - 25Belə bir şey. Layihəni yenidən işə salsanız, verilənlər bazası tələb olunan versiyaya tam uyğun gəldiyi üçün flyway sadəcə olaraq yayılan miqrasiyaları atlayacaq.

Nəticə

Bu dəfə biz SpringBoot ilə birlikdə verilənlər bazası miqrasiya alətini başa düşməyi və istifadə etməyi öyrəndik. Bu məlumat, Flyway nümunəsindən istifadə edərək verilənlər bazası versiyasına nəzarət alətinin nə olduğunu başa düşmək üçün lazımdır. Dostlar, göstərdiyim layihənin mənbə kodu təşkilatımızda Github-da dərc olunub . Nümunəni bəyənirsinizsə, ona bir ulduz verin və mən başa düşəcəyəm ki, mənim işim faydalıdır və həqiqətən davam etməyə dəyər. Ənənəvi olaraq Github hesabıma abunə olmağı təklif edirəm . Onun vasitəsilə mən bütün işlərimi açıq mənbə və məqalələrimi daim müşayiət edən bütün demo layihələr üzərində aparıram. Oxuduğunuz üçün hər kəsə təşəkkür edirəm. Növbəti dəfə ərizəmizi yazacağıq. Gələcəkdə Docker-də bəzi zəruri nəzəriyyələr olacaq, lakin biz onu təcrübə ilə çox sulandıracağıq.

faydalı bağlantılar

Bu gün çox faydalı bağlantılar yoxdur. Evgeni'nin videosuna diqqət yetirin, həqiqətən buna dəyər!
  1. Baharda layihələr yaratmaq üçün sayt
  2. Evgeni Borisov - Bulaq inşaatçısı
  3. Flyway üçün Baharda Sənədləşmə

Serialdakı bütün materialların siyahısı bu məqalənin əvvəlindədir.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION