JavaRush /Blog Jawa /Random-JV /SpringBoot + Flyway - "Proyek Jawa saka A nganti Z"

SpringBoot + Flyway - "Proyek Jawa saka A nganti Z"

Diterbitake ing grup
Artikel saka seri babagan nggawe proyek Jawa (pranala menyang materi liyane ana ing pungkasan). Tujuane kanggo nganalisa teknologi kunci, asile nulis bot telegram. Ing bagean iki, kita nyoba mbukak SpringBoot lan Flyway. Jumlah minimal teori, kaya sing disenengi))) Kita ngilangi perbandingan pungkasan Flyway / Liquibase kanggo wektu sing ora ditemtokake lan tekan titik. Lan sanadyan mangkono iku wis nyeret ing. Supaya ora njlèntrèhaké Flyway kaping pindho, aku mutusaké kanggo langsung nambah menyang project JRTB mangsa."Proyek Java saka A nganti Z": SpringBoot + Flyway - 1

Apa sing kudu kita lakoni minangka bagéan saka iki?

  1. Bukak aplikasi SpringBoot adhedhasar Maven.
  2. Tambah Flyway ana: untunge, padha gampang Integrasi.
  3. Tambah skema kanggo tabel sing ana ing conto database.
Kanthi cara iki kita bakal sinau carane nggarap Flyway. Napa proyek kapisah, lan ora langsung menyang JRTB kita? Amarga mengko, sapa wae sing pengin ngerti carane nindakake iki bakal duwe proyek kanthi conto lan artikel sing nerangake nggarap. Ayo padha lunga!

Apa iku flyway

Kanggo nggunakake soko, sampeyan kudu ngerti apa iku lan ngapa. Flyway minangka alat kontrol versi database. Tembung-tembung kasebut wis kondhang, nanging piye wae pemahamane durung ditambah, ta? Ayo dadi nyoba kanggo njlèntrèhaké masalah sing flyway solves. Ayo kita duwe proyek. Kaya kabeh ing jagad iki, ora sampurna, mula ora bisa ngrancang lan nggambar versi pungkasan proyek kasebut. Saben-saben muncul nuansa sing ora dingerteni. Proyek kasebut nggunakake basis data ing karyane. Mesthi, yen proyek diganti, struktur database uga bisa diganti. Ayo kita nambah lapangan anyar kanggo salah sawijining entitas ing proyek kita. Carane nindakake?
  1. Tambah kolom iki menyang entitas kita, nganyari kabeh supaya logika bisnis bisa digunakake.
  2. Nganyari database. Cara mung bisa ditindakake kanthi manual. Kanggo nindakake iki, sampeyan kudu mlebu lan ndhaptar skrip sql sing dibutuhake.
Poin kapindho nuwuhake akeh pitakonan:
  1. Nanging yen kita duwe luwih saka siji panggonan kanggo nyebarake proyek kita, apa iki kudu ditindakake ing saben wong?
  2. lan yen kita arep bali, carane kita ngerti persis apa negara struktur database saiki?
  3. Kepiye carane bisa yakin yen pangowahan database sukses?
  4. Kepiye carane bisa entuk kesempatan kanggo nglacak kabeh owah-owahan database sing kedadeyan ing proyek kasebut?
Yen sampeyan nindakake kanthi manual, jawaban ora bakal dadi sing paling apik ... Kanggo ngindhari kabeh kesulitan kasebut, sampeyan bisa nggunakake alat migrasi database. Salah sijine yaiku Flyway. Apa tugase? Minangka bagéan saka proyek kasebut, kita nyimpen file sql sing kapisah (sing diarani migrasi), sing nyimpen kabeh sing kita lakoni karo database sekaligus. Kabeh migrasi dumadi kanthi ketat ing urutan tartamtu, sing ngidini sampeyan nglacak owah-owahan ing struktur lan data database (asring, nggunakake migrasi, data tes ditambahake menyang proyek kasebut supaya nalika dikirim menyang sawetara server, wis ana sawetara nilai sing sampeyan bisa nguji proyek). Sawise tes lulus, migrasi diluncurake nalika proyek dibangun. Dheweke nyambung menyang database lan nindakake migrasi. Yen migrasi wis ditindakake ing basis data iki, flyway mung bakal ngliwati (nyimpen data babagan migrasi lan statuse ing tabel kapisah ing database, sing mbantu ngatur), lan yen sawetara migrasi ora kasil, banjur proyek kasebut mbangun lan soyo tambah sawijining (penyebaran) kanggo server bakal mandheg. Aku nyoba kanggo njlèntrèhaké ing minangka akeh rinci sabisa. Yen kabeh isih durung jelas, ora masalah: kanthi laku, pangerten bakal teka.

Bukak SpringBoot + Flyway

Apa Spring Boot

Apa sing diluncurake?... Kanggo ngerti apa lan apa sing ditindakake, sampeyan kudu mutusake apa SpringBoot. Pisanan, ayo cepet (uga, cepet banget) ngomong babagan Spring . Saiki, iki minangka standar industri de facto kanggo ngembangake aplikasi server ing Jawa. Standar apa? Kepiye carane aku bisa nerangake babagan iki? Spring minangka kerangka aplikasi, sing banjur dibuwang "daging" - logika bisnis kita. Kanthi bantuan saka Spring (sabanjuré aku bakal nggunakake kertas tracing iki supaya ora mbuwang wektu ngoper basa :D)) Spring menehi kita wiwitan saka kang kita miwiti kanggo nindakake kabeh. Iku multi-faceted, multi-modular:
  1. Apa sampeyan pengin nggarap database? Apa sampeyan pengin relasional? Apa sampeyan pengin non-relasional? Kene kita karo Spring Data.
  2. Apa sampeyan pengin nggarap panjalukan http? Iki, Spring web (Spring MVC).
  3. Apa sampeyan butuh wadhah kanggo kabeh obyek ing sak panggonan? Punika Spring Core.
  4. Apa sampeyan kudu nyiyapake keamanan ing proyek supaya ana peran lan rantai komando sing beda? Keamanan Spring.
  5. Mung nalika sampeyan panginten iku bakal dadi apik kanggo duwe kuwi, pranyata Spring wis apa sing perlu, lan nggabungake cepet lan gampang.
Mula, kita bisa ujar manawa iki ora mung kerangka (perpustakaan sing gedhe banget), nanging kabeh ekosistem sing berkembang kanthi cepet. Kanggo ngerti apa Spring Core, yaiku basis modul sing disambungake, aku menehi saran supaya nonton demo langsung babagan nggawe kerangka kerja sampeyan dhewe. Iki dianakake dening Evgeny Borisov, wong sing keren banget ing bidang Jawa lan Musim Semi. Tindakake kabeh sing ditindakake, lan pakaryan musim semi bakal dadi luwih jelas kanggo sampeyan. SpringBoot, minangka puncak saka kabeh sing diduweni. Keajaiban banyu murni. Setelan minimal kanggo nggawe wiwitan aplikasi. Mesthi, iki ora bakal menehi pangerten babagan cara nggunakake lan apa sing kudu ditindakake. Nanging sadurunge cepet-cepet menyang ambane pembangunan, sampeyan kudu katon ing kabeh saka mripat manuk kang.

Bukak SpringBoot

Amarga kita wis ngerti apa Maven, ayo nggawe proyek anyar kanggo kabutuhan. Kanggo nindakake iki, sampeyan mung kudu pindhah menyang situs web sing digawe khusus kanggo masalah iki. Iki diarani Spring Initializr . "Proyek Java saka A nganti Z": SpringBoot + Flyway - 2Ing kene sampeyan kudu ngisi lan milih sing dibutuhake:
  1. Alat mbangun proyek yaiku gradle utawa maven. Kaya sing sampeyan ngerteni, Semut ora disebutake maneh. Iki minangka pitunjuk sing apik babagan alat mbangun sing cocog karo wektu sampeyan.
  2. Basa sing bisa ditulis yaiku jawa, kotlin, groovy. Kabeh iku prasaja: kabeh padha JVM-kaya lan gampang mbukak kode Jawa. Miturut cara, iku worth looking ing Kotlin. Groovy wis terus terang dadi ora menarik (ana wektu nalika padha ngalih menyang grooves, nanging cepet liwati).
  3. Versi Spring ... Ing kene sampeyan kudu ngerti manawa versi bagean utama Spring lan module konsisten.
  4. Data proyek. Aku wis nerangake bab-bab iki.
  5. Kita milih arsip sing bakal diklumpukake - Jar utawa Perang.
  6. Inggih, versi Jawa favorit kita. Lan bubar ana akeh versi iki ... Dheweke ngenteni pirang-pirang taun, lan saiki ana rong taun.
Ing kasus kita, kita bakal nerbitake proyek iki ing organisasi JavaRush Community , supaya informasi babagan proyek bakal cocok:
  1. Maven - ora ana gunane yen kita ngomong karo sampeyan sadurunge.
  2. Jawa iku tresnane :D
  3. Ayo njupuk versi 2.2.11. Apa ora sing paling anyar? Amarga luwih anyar, luwih gedhe kemungkinan ana sawetara kewan omo. Kanggo kita, ora masalah versi apa, nanging sing luwih lawas bakal luwih dipercaya. Mulane, kita milih 2.2.11.
  4. Grup: com.github.javarushcommunity
  5. Artefak: springboot-flyway-demo
  6. Jeneng: SpringBoot + Flyway Demo
  7. Description: Project nduduhake integrasi antarane SpringBoot lan Flyway . (Ya, kemampuan kanggo nulis dokumentasi minangka bagean penting saka pangembangan :))
  8. Jeneng paket: com.github.javarushcommunity.springbootflywaydemo . Ing kene dheweke bakal langsung nggawe paket dhasar kanggo kita kanthi kelas sing bakal miwiti aplikasi kita.
  9. Kemasan: Jar
  10. Jawa : 8. Aja ndhisiki lokomotif lan njupuk sing lawas wolu. Kenapa ora 11? Kanggo apa? Kanggo conto kita, aku ora weruh titik.
"Proyek Java saka A nganti Z": SpringBoot + Flyway - 3Saiki ayo nambah modul. Kita kudu golek integrasi karo Flyway. Sampeyan uga bisa nambah soko sing gegandhengan karo MySQL lan Spring Data. Ayo ditambahi lombok liyane (sing perlu banget, percoyo wae :D)) Kanggo nindakake iki, klik ADD DEPENDENCY ... banjur pilih kabeh sing perlu: "Proyek Java saka A nganti Z": SpringBoot + Flyway - 4Iki carane kita nambah Flyway. "Proyek Java saka A nganti Z": SpringBoot + Flyway - 5Lombok... Lan sateruse. Akibaté, kita entuk: "Proyek Java saka A nganti Z": SpringBoot + Flyway - 6Huh ... kita ngisi kabeh)) Saiki klik GENERATE ... lan iku - arsip karo proyek sing digawe wis siyap :) Ana uga sing keren kaya SHARE ... , sing menehi link menyang kaca sing lagi wae sampeyan isi. Yaiku, iki sing dakkarepake . Lan sanajan ana sing salah, sampeyan bisa mriksa kanthi nggunakake link kasebut. Sabanjure, kita kudu ngubungake proyek sing digawe menyang repositori Git, supaya kita kloning proyek springboot-flyway-demo sing digawe lan download liwat IDEA. Kanggo nindakake iki, sampeyan kudu mbukak ide lan pilih File -> New -> Project from Existing Sources... : "Proyek Java saka A nganti Z": SpringBoot + Flyway - 7Saiki tambahake URL banjur klik Klone . Langkah sabanjure yaiku nransfer internal proyek sing digawe ing sing dikloning. Bingung? Aku bakal nuduhake sampeyan saiki. Aku mbukak zip lan nampa set file ing ngisor iki: "Proyek Java saka A nganti Z": SpringBoot + Flyway - 8Iki kudu ditransfer menyang proyek kloning. Kaya ing artikel sadurunge, ayo nambah pom.xml minangka proyek maven: "Proyek Java saka A nganti Z": SpringBoot + Flyway - 9Saiki kita kepengin weruh apa sing digawe kanggo kita. Yen sampeyan mbukak kabeh folder ing src lan luwih, sampeyan bakal weruh hirarki biasanipun ing proyek Maven, kang kita rembugan ing artikel sadurunge . Kanggo sing durung maca, wacanen! "Proyek Java saka A nganti Z": SpringBoot + Flyway - 10Bisa dideleng yen kita duwe kelas Aplikasi, lan aplikasi SpringBoot bakal diluncurake kanthi nggunakake. Thanks kanggo plugin Maven kanggo SpringBoot, saiki kita duwe tugas sing dibutuhake kanggo Maven, yaiku spring-boot:run. Ing endi kita bisa nemokake informasi iki? Ing sisih tengen, mbukak piring Maven lan proyek kita: "Proyek Java saka A nganti Z": SpringBoot + Flyway - 11Bakal ana kesalahan, lan kita ora bakal bisa maca, kita bakal weruh kaya iki: "Proyek Java saka A nganti Z": SpringBoot + Flyway - 12Kanggo entuk informasi luwih lengkap, kanggo kacepetan kita bisa mbukak cara utama kelas Aplikasi: "Proyek Java saka A nganti Z": SpringBoot + Flyway - 13Banjur kita bakal weruh alesan nyata: "Proyek Java saka A nganti Z": SpringBoot + Flyway - 14Kene wis Ana informasi luwih lengkap lan sampeyan bisa nindakake soko karo. Opo sing salah? Kita duwe dependensi sing ana gandhengane karo database, mula kita kudu nyedhiyakake setelan kanggo nyambungake. Kanggo nindakake iki, kita google lan nemokake yen kita kudu nambah konfigurasi ing ngisor iki menyang 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
We mbukak cara utama maneh lan njaluk: "Proyek Java saka A nganti Z": SpringBoot + Flyway - 15Saiki kita kudu nambah paling siji migrasi. Kanggo nggawe migrasi kanthi bener, sampeyan kudu njupuk cithakan ing ngisor iki: V<VERSION>__<NAME>.sql Nggunakake cithakan iki, kita bakal nggawe file migrasi sing jenenge V00001__Create_country_table.sql ing folder sing cocog: /src/main/resources/ db.migration/ . Ayo nggawe tabel negara ing kono. Ayo njupuk script saka artikel kapindho bab database . "Proyek Java saka A nganti Z": SpringBoot + Flyway - 16Sadurunge miwiti, ayo mlebu lan nggawe database kanggo karya: flyway_demo_db. Ayo nindakake iki liwat MysqlWorkbench: "Proyek Java saka A nganti Z": SpringBoot + Flyway - 17Saiki kita bisa mbukak cara utama maneh: "Proyek Java saka A nganti Z": SpringBoot + Flyway - 18Kabeh wis rampung, nanging amarga kita ora duwe apa-apa ing proyek kasebut, mula rampung. Nanging, jelas saka log ( waca apa log kasebut):
  1. Kasil disambungake menyang database.
  2. Migrasi wis divalidasi lan kabeh ok.
  3. Flyway wis nggawe tabel kanggo ngatur migrasi.
  4. Lan apa migrasi 00001 diwiwiti - nggawe negara kasebut sukses.
Kanggo mriksa iki, sampeyan bisa mbukak lan ndeleng apa sing ditindakake ing database. Dadi ayo menyang server MySQL lan ndeleng apa sing kedadeyan karo tabel ing basis data flyway_demo_db: $ USE flyway_demo_db; $TABEL TABEL; "Proyek Java saka A nganti Z": SpringBoot + Flyway - 19Kaya sing dakkarepake, ana migrasi, nalika tabel negara digawe lan muncul tabel flyway_schema_history, sing nyimpen informasi babagan migrasi. Ayo dadi luwih lan ndeleng apa cathetan ana (lan apa ana ing kabeh). $SELECT * FROM flyway_schema_history; "Proyek Java saka A nganti Z": SpringBoot + Flyway - 20Iki rekaman, mung siji. Isine akeh data sing menarik. Versi, deskripsi migrasi, jinis SQL apa (lan bisa uga XML), jeneng skrip dhewe, checksum ( iki kaya kode hash, sing digunakake kanggo mriksa apa migrasi wis diganti utawa ora. Iki wis rampung. yen kita nindakake migrasi ing basis data banjur didandani: iki ora bisa ditindakake, kabeh owah-owahan mung digawe liwat migrasi anyar lan kanggo nyegah kedadeyan kasebut, jumlah mriksa ngawasi iki ), jeneng sql pangguna, pangolahan migrasi tanggal, wektu eksekusi lan asil (kasil utawa ora kasil). Migrasi sing ditulis sapisan ora kudu diganti ing mangsa ngarep. Malah yen ana cacat ing. Kabeh owah-owahan dumadi mung liwat migrasi anyar. Iku penting banget. Kanggo nuduhake apa sing bakal kelakon, ayo ngganti script kita lan nyoba kanggo mbukak maneh. Ayo dadi nambah siji entri kanggo tabel negara ing migrasi kita: "Proyek Java saka A nganti Z": SpringBoot + Flyway - 21lan mbukak cara utama lan iki apa kita njaluk: "Proyek Java saka A nganti Z": SpringBoot + Flyway - 22Kaya aku samesthine, flyway dikenali sing script wis diganti lan ora nindakake migrasi. Ing sawetara kasus, iku uga bener perlu kanggo mbukak migrasi dianyari, lan supaya flyway kanggo skip iki, sampeyan kudu mbusak entri ing tabel flyway_schema_history banjur mbukak migrasi dianyari. Iki ora prilaku normal lan ora kudu dadi, nanging sampeyan uga kudu ngerti babagan cara iki kanggo ngatasi masalah. We urusan karo migrasi pisanan. Saiki aku pengin nambah migrasi liyane, kanthi data babagan negara, kaya sing ana ing artikel babagan database: file V00002__Add_test_data_to_country.sql"Proyek Java saka A nganti Z": SpringBoot + Flyway - 23 Lan ayo mbukak metode utama maneh: "Proyek Java saka A nganti Z": SpringBoot + Flyway - 24Saka log kasebut jelas yen sadurunge migrasi diwiwiti, database kasebut ing versi 00001, supaya kabeh migrasi sawise versi iki. Sabanjure, versi 00002 diluncurake lan sukses. Ayo priksa, utawa sampeyan wis pracaya kula sing telung cathetan ing negara bakal wis ing database?)) Aku bakal mriksa, supaya bukti: "Proyek Java saka A nganti Z": SpringBoot + Flyway - 25Soko kaya iki. Yen sampeyan mbukak proyek maneh, flyway mung bakal nglewati migrasi, amarga basis data tundhuk karo versi sing dibutuhake.

Kesimpulan

Wektu iki kita sinau carane ngerti lan nggunakake alat migrasi database bebarengan karo SpringBoot. Informasi iki perlu kanggo mangerteni apa alat kontrol versi database, nggunakake Flyway minangka conto. Kanca-kanca, kode sumber proyek sing aku nuduhake diterbitake ing organisasi kita ing Github . Yen sampeyan seneng conto, menehi lintang , lan aku bakal ngerti yen karyaku migunani lan pancene worth terus. Cara tradisional, aku saranake langganan akun Github . Liwat dheweke, aku nindakake kabeh karya ing open source lan kabeh proyek demo sing tansah ngiringi artikelku. Matur nuwun kanggo kabeh sing wis maca. Sabanjure kita bakal nulis aplikasi kita. Bakal ana sawetara teori sing dibutuhake ing Docker ing mangsa ngarep, nanging kita bakal ngencerake kanthi praktik.

pranala migunani

Saiki ora ana akeh pranala sing migunani. Pay manungsa waé menyang video Evgeniy, iku pancene worth iku!
  1. Situs web kanggo nggawe proyek ing Spring
  2. Evgeniy Borisov - Spring builder
  3. Dokumentasi ing Spring kanggo Flyway

Dhaptar kabeh materi ing seri kasebut ana ing wiwitan artikel iki.

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