JavaRush /Java блогу /Random-KY /SpringBoot + Flyway - "Адан Яга чейин Java долбоору"
Roman Beekeeper
Деңгээл

SpringBoot + Flyway - "Адан Яга чейин Java долбоору"

Группада жарыяланган
Java долбоорун түзүү жөнүндө бир катар макала (башка материалдарга шилтемелер аягында). Анын максаты негизги технологияларды талдоо, натыйжасы телеграмма бот жазуу болуп саналат. Бул бөлүктө биз SpringBoot жана Flywayди ишке киргизүүгө аракет кылабыз. Теориянын минималдуу көлөмү, сиз каалагандай))) Биз Flyway/Liquibase акыркы салыштыруусун белгисиз мөөнөткө өткөрүп жиберебиз жана пунктка келебиз. Ошондой болсо да ал эчак эле созулуп кеткен. Flyway эки жолу сүрөттөлбөш үчүн, мен аны дароо биздин келечектеги JRTB долбоорубузга кошууну чечтим."Адан Яга Java долбоору": SpringBoot + Flyway - 1

Мунун бир бөлүгү катары биз эмне кылышыбыз керек?

  1. Maven негизинде SpringBoot тиркемесин ишке киргизиңиз.
  2. Ал жерде Flyway кошуңуз: бактыга жараша, алар оңой интеграцияланган.
  3. Мисал базасында бизде бар tableлар үчүн схеманы кошуңуз.
Ушундай жол менен биз Flyway менен иштөөнү үйрөнөбүз. Эмне үчүн биздин ЖРТБга дароо эмес, өзүнчө долбоор? Анткени кийинчерээк муну кантип жасоону түшүнгүсү келген ар бир адамда мисал менен долбоор жана аны менен иштөөнү сүрөттөгөн макала болот. Мейли, кеттик!

Flyway деген эмне

Бир нерсени колдонуу үчүн, адегенде анын эмне экенин жана эмне үчүн экенин аныкташ керек. Flyway маалымат базасынын versionсын башкаруу куралы. Сөздөрү белгилүү, бирок эмнегедир түшүнүк кошула элек, туурабы? Келгиле, учуу жолу чечкен көйгөйдү сүрөттөөгө аракет кылалы. Бизде долбоор бар дейли. Биздин дүйнөдөгү бардык нерселер сыяктуу эле, ал идеалдуу эмес, ошондуктан долбоордун акыркы вариантын пландаштыруу жана түзүү мүмкүн болгон жок. Ар бир жолу белгилүү бир эсепке алынбаган нюанстар пайда болот. Долбоор өз ишинде маалымат базасын колдонот. Албетте, долбоор өзгөрсө, маалымат базасынын структурасы да өзгөрүшү мүмкүн. Долбоорубуздагы an objectтердин бири үчүн жаңы талааны коштук дейли. Муну кандай жасаш керек?
  1. Бул талааны биздин уюмга кошуңуз, бизнес логикасы иштеши үчүн бардыгын жаңыртыңыз.
  2. Маалымат базасын жаңыртуу. Мүмкүн болгон жалгыз жол - аны кол менен жасоо. Бул үчүн, сиз кирип, керектүү SQL скриптин катташыңыз керек.
Экинчи пункт көптөгөн суроолорду жаратат:
  1. Бирок, эгерде бизде долбоорду ишке ашыра турган бир нече жерибиз болсо, анда муну алардын ар биринде жасоо керекпи?
  2. жана эгерде биз артка кайтууну кааласак, анда маалымат базасынын түзүмү азыр кандай абалда экенин кайдан билебиз?
  3. Маалыматтар базасын өзгөртүү ийгorктүү болгонуна кантип ишенсек болот?
  4. Долбоордо болгон бардык маалыматтар базасына көз салуу мүмкүнчүлүгүн кантип алсам болот?
Эгер сиз муну кол менен жасасаңыз, жооптор эң жакшы болбойт... Бул кыйынчылыктардын баарын болтурбоо үчүн, маалымат базасын көчүрүү куралын колдонсоңуз болот. Алардын бири Flyway. Анын иши эмне? Долбоордун алкагында биз бир эле учурда маалымат базасы менен кылган нерселердин бардыгын сактаган өзүнчө SQL файлдарын (миграция деп аталган) сактайбыз. Бардык миграциялар белгилүү бир тартипте ишке ашат, бул маалымат базасынын түзүмүндөгү жана маалыматтарындагы өзгөрүүлөргө көз салууга мүмкүндүк берет (көп учурда миграцияны колдонуу менен тесттик маалыматтар долбоорго кошулат, андыктан ал кандайдыр бир serverге орнотулганда, ал буга чейин эле кээ бир Долбоорду сынай турган баалуулуктар). Сыноолордон өткөндөн кийин, долбоор курулганда миграциялар башталат. Алар маалымат базасына туташып, миграцияны аткарышат. Эгерде миграциялар буга чейин бул маалымат базасында ишке ашырылган болсо, анда flyway аларды жөн эле өткөрүп жиберет (ал миграциялар жана алардын статусу жөнүндө маалыматтарды маалымат базасында өзүнчө tableда сактайт, бул аларды башкарууга жардам берет) жана эгер кандайдыр бир миграция ийгorксиз болсо, анда долбоор куруу жана аны serverге орнотуу (орнотуу) токтойт. Мен аны мүмкүн болушунча кеңири сүрөттөөгө аракет кылдым. Эгер баары дагы эле так эмес болсо, анда бул маанилүү эмес: практика менен, түшүнүү келет.

SpringBoot + Flywayти ишке киргизиңиз

Жазгы Бут деген эмне

Биз эмнени ишке киргизип жатабыз?... Эмне жана эмне үчүн кылып жатканыбызды түшүнүү үчүн SpringBoot деген эмне экенин чечишиңиз керек. Биринчиден, келгиле, тез (жакшы, абдан тез) Жаз жөнүндө сүйлөшөлү . Азыркы учурда, бул Java-да serverдик тиркемелерди иштеп чыгууда де-факто өнөр жай стандарты. Эмненин стандарты? Муну сага кантип түшүндүрсөм болот? Жаз - бул тиркеменин скелети, ага биз "этти" ыргытабыз - биздин бизнес логика. Жаздын жардамы менен (мындан ары мен бул калька кагазын тилди алмаштырууга убакытты текке кетирбөө үчүн колдоном:D)) Жаз бизге бардык нерсени жасай баштай турган башталыш берет. Бул көп кырдуу, көп модулдуу:
  1. Маалыматтар базасы менен иштегиңиз келеби? Сиз мамилени каалайсызбы? Сиз мамилелерди каалайсызбы? Бул жерде биз Spring Data мененбиз.
  2. http сурамдары менен иштегиңиз келеби? Мына сага, Жазгы желе (Spring MVC).
  3. Сизге бир жерде бардык an objectтериңиз үчүн контейнер керекпи? Бул жерде Жаз өзөгү.
  4. Ар кандай ролдор жана буйрук чынжырчасы болушу үчүн долбоордо коопсуздукту орнотуу керекпи? Жазгы коопсуздук.
  5. Ушундай нерсе болсо жакшы болот деп ойлогондо, Жаздын сизге керектүү нерселери бар экен, ал тез жана оңой интеграцияланат.
Демек, бул жөн эле алHow (мындай чоң китепкана) эмес, бүтүндөй бир экосистема деп айтсак болот. Spring Core деген эмне экенин түшүнүү үчүн, башкача айтканда, модулдар туташтырылган база, мен сизге өз алHowыңызды түзүү боюнча түз демонстрацияны көрүүнү сунуштайм. Аны Евгений Борисов, Ява жана Жаз талаасында абдан сонун жигит алып барат. Ал кылгандын баарын кыл, ошондо жаздын иши сага айкын болот. SpringBoot, өз кезегинде, аларда бардыгынын туу чокусу. Таза суунун сыйкыры. Колдонмону биринчи жолу ишке киргизүү үчүн минималдуу орнотуулар. Албетте, бул сизге аны кантип колдонуу жана эмне кылуу керектиги жөнүндө түшүнүк бербейт. Бирок өнүгүүнүн түпкүрүнө кирүүдөн мурун бардыгына куштун көзү менен караш керек.

SpringBoot ишке киргизилүүдө

Биз Maven эмне экенин түшүнгөндүктөн, келгиле, муктаждыктарыбыз үчүн жаңы долбоор түзөлү. Бул үчүн, сиз жөн гана бул маселе үчүн атайын түзүлгөн веб-сайтка барышыңыз керек. Бул жазгы Initializr деп аталат . "Адан Яга Java долбоору": SpringBoot + Flyway - 2Бул жерде сиз толтуруп, керектүү нерсени тандап алышыңыз керек:
  1. Долбоорду куруу куралы gradle же maven болуп саналат. Көрүнүп тургандай, кумурсканын аты да жок. Бул кайсы куруу куралдары убактыңызга татыктуу экени жөнүндө жакшы ишарат.
  2. Сиз жаза турган тил - java, kotlin, groovy. Бул жерде баары жөнөкөй: алардын баары JVM сыяктуу жана Java codeун оңой иштетет. Айтмакчы, бул Котлинди карап чыгуу керек. Groovy чындыгында кызыксыз болуп калды (бир кезде алар пазалга өтүп кеткен, бирок ал бат эле өтүп кеткен).
  3. Жазгы version... Бул жерде Жаздын негизги бөлүгүнүн versionлары жана анын модулдары ырааттуу экенин түшүнүү керек.
  4. Долбоордун маалыматтары. Мен буга чейин бул нерселерди сүрөттөгөн.
  5. Кайсы архив чогултулаарын тандайбыз - Жар же Согуш.
  6. Ооба, биздин сүйүктүү Java versionсы. Ал эми акыркы убакта мындай versionлар көп болду... Жылдап күтүштү, эми жылына эки болуп жатат.
Биздин учурда, биз бул долбоорду JavaRush Community уюмунда жарыялайбыз , андыктан долбоор жөнүндө маалымат ылайыктуу болот:
  1. Maven - бул жөнүндө биз сиз менен мурда сүйлөшкөнүбүз бекер эмес.
  2. Java биздин сүйүктүүм: D
  3. 2.2.11 versionсын алалы. Эмне үчүн эң жаңысы эмес? Анткени ал канчалык жаңы болсо, анда мүчүлүштүктөр болушу мүмкүн. Биз үчүн кайсы version маанилүү эмес, бирок эскиси ишенимдүүраак болот. Ошондуктан, биз 2.2.11 тандайбыз.
  4. Группа: com.github.javarushcommunity
  5. Артефакт: springboot-flyway-демо
  6. Аты-жөнү: SpringBoot + Flyway Demo
  7. Description: Долбоор SpringBoot жана Flyway ортосундагы интеграцияны көрсөтөт . (Ооба, documentтерди жазуу жөндөмү өнүгүүнүн маанилүү бөлүгү :))
  8. Пакеттин аталышы: com.github.javarushcommunity.springbootflywaydemo . Бул жерде алар дароо биздин колдонмону ишке киргизе турган класс менен биз үчүн негизги пакетти түзүшөт.
  9. Таңгактоо: Jar
  10. Ява: 8. Паровоздон озуп кетпей, эски сегизди алалы. Эмне үчүн 11 эмес? Эмне үчүн? Биздин мисал үчүн, мен маанисин көрбөй жатам.
"Адан Яга Java долбоору": SpringBoot + Flyway - 3Эми модулдарды кошолу. Биз Flyway менен интеграцияны табышыбыз керек. Сиз ошондой эле MySQL жана Spring Data менен байланышкан бир нерсе кошо аласыз. Дагы бир ломбок кошолу (бул абдан зарыл нерсе, азыр эле мага ишениңиз :D)) Бул үчүн, КӨЗ КӨЗ КОШУУ ... дегенди басып, керектүү нерселердин баарын тандаңыз: "Адан Яга Java долбоору": SpringBoot + Flyway - 4Flywayди ушинтип кошобуз. "Java долбоору Адан Яга": SpringBoot + Flyway - 5Ломбок... Жана башкалар. Натыйжада, биз алабыз: "Адан Яга Java долбоору": SpringBoot + Flyway - 6Эх... баарын толтурдук)) Эми ЖҮРӨТ баскычын басыңыз... жана бүттү - түзүлгөн проект менен архив даяр :) Ошондой эле БӨЛҮШҮҮ сыяктуу сонун нерсе бар... , ал сизге жаңы эле толтурган баракка шилтеме берет. Башкача айтканда, бул жерде мен жараткан . Жана бир нерсе туура эмес болсо да, сиз ар дайым шилтеме аркылуу текшере аласыз. Андан кийин, биз түзүлгөн долбоорду Git репозиторийине байланыштырышыбыз керек, ошондуктан биз түзүлгөн springboot-flyway-demo долбоорун клондоо жана IDEA аркылуу жүктөп алуу. Бул үчүн, сиз идеяны ачып, File -> New -> Project from Existing Sources... : "Адан Яга Java долбоору": SpringBoot + Flyway - 7Эми URL кошуп, Клондоо баскычын басыңыз . Кийинки кадам - ​​биз клондогон долбоордун ичинде түзүлгөн долбоордун ички түзүлүштөрүн өткөрүп берүү. Чаташып калдыңызбы? Мен сага азыр көрсөтөм. Мен аны ачтым жана төмөнкү файлдар топтомун алдым: "Адан Яга Java долбоору": SpringBoot + Flyway - 8Буларды клондолгон долбоорго өткөрүү керек. Мурунку макаладагыдай эле, келгиле, pom.xml файлын maven долбоору катары кошолу: "Java долбоору Адан Яга": SpringBoot + Flyway - 9Эми биз үчүн эмне түзүлгөнүн карап көрүүгө кызыкдарбыз. Эгерде сиз бардык папкаларды src жана андан ары ачсаңыз, биз мурунку макалада талкууланган Maven долбоорлорунда кадимки иерархияны көрөсүз . Окубагандар окугула! "Адан Яга Java долбоору": SpringBoot + Flyway - 10Көрсө, бизде Колдонмо классы бар жана биздин SpringBoot тиркемеси аны колдонуу менен ишке киргизилет. SpringBoot үчүн Maven плагининин аркасында бизде азыр Maven үчүн керектүү тапшырма бар, тактап айтканда spring-boot:run. Бул маалыматты кайдан тапсак болот? Оң жакта, Maven плитасын жана биздин долбоорду ачып: "Адан Яга Java долбоору": SpringBoot + Flyway - 11Ката болот жана биз аны окуй албайбыз, биз төмөнкүдөй нерсени көрөбүз: "Адан Яга Java долбоору": SpringBoot + Flyway - 12Көбүрөөк маалымат алуу үчүн, ылдамдык үчүн биз негизги ыкманы иштетсек болот. Колдонмо классы: "Адан Яга чейин Java долбоору": SpringBoot + Flyway - 13Анан биз чыныгы себебин көрөбүз: "Адан Яга Java долбоору": SpringBoot + Flyway - 14Бул жерде дагы көп маалымат бар жана сиз аны менен бир нерсе кыла аласыз. Эмне туура эмес? Бизде маалымат базасы менен байланышкан көз карандылыктар бар, ошондуктан ага туташуу үчүн орнотууларды беришибиз керек. Бул үчүн, биз Google'да издейбиз жана 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
Биз кайрадан негизги ыкманы иштетип, алабыз: "Адан Яга Java долбоору": SpringBoot + Flyway - 15Эми биз жок дегенде бир миграцияны кошуубуз керек. Миграцияны туура түзүү үчүн төмөнкү шаблонду алышыңыз керек: V<VERSION>__<NAME>.sql Бул шаблонду колдонуу менен биз V00001__Create_country_table.sql аттуу көчүрүү файлын тиешелүү папкага түзөбүз : /src/main/resources/ db.migration/ . Анда өлкө tableсын түзөлү. Келгиле, маалымат базасы жөнүндө экинчи макаладан сценарийди алалы . "Адан Яга Java долбоору": SpringBoot + Flyway - 16Баштоодон мурун, кириңиз жана жумуш үчүн маалымат базасын түзөлү: flyway_demo_db. Муну MysqlWorkbench аркылуу жасайлы: "Адан Яга Java долбоору": SpringBoot + Flyway - 17Эми биз негизги ыкманы кайра иштетсек болот: "Адан Яга Java долбоору": SpringBoot + Flyway - 18Баары ойдогудай болду, бирок бизде долбоордо азырынча эч нерсе жок болгондуктан, ал иштеп бүттү. Бирок, журналдардан ( журналдардын эмне экенин окуп чыгыңыз ) көрүнүп турат:
  1. Маалыматтар базасына ийгorктүү туташты.
  2. Миграция тастыкталды жана баары жакшы.
  3. Flyway миграцияны башкаруу үчүн tableны түздү.
  4. Ал эми 00001 кандай миграция башталды - өлкөнүн түзүлүшү ийгorктүү болду.
Муну текшерүү үчүн барып маалымат базасында эмнелер жасалып жатканын көрүүгө болот. Келгиле, MySQL serverибизге барып, flyway_demo_db маалымат базасындагы tableларда эмне болуп жатканын карап көрөлү: $ USE flyway_demo_db; $SHOW TABLES; "Адан Яга Java долбоору": SpringBoot + Flyway - 19Мен күткөндөй, миграция болуп өттү, анын жүрүшүндө өлкө tableсы түзүлүп, миграциялар боюнча маалымат сакталган flyway_schema_history tableсы пайда болду. Келгиле, андан ары барып, кандай жазуулар бар экенин карап көрөлү (жана такыр барбы). $SELECT * FROM flyway_schema_history; "Java долбоору Адан Яга": SpringBoot + Flyway - 20Бул жерде жазуу, жалгыз. Ал көптөгөн кызыктуу маалыматтарды камтыйт. Версия, миграциянын сүрөттөлүшү, кандай SQL түрү (жана балким XML да болушу мүмкүн), скрипттин өзүнүн аты, текшерүү суммасы ( бул хэшcode сыяктуу нерсе, ал миграциянын өзгөргөнүн же өзгөрбөгөнүн текшерүү үчүн колдонулат. Бул жасалды. эгерде биз маалымат базасында миграцияны жүргүзгөн болсок, анда ал оңдолгон: муну жасоо мүмкүн эмес, бардык өзгөртүүлөр жаңы миграция аркылуу гана жүргүзүлөт жана муну болтурбоо үчүн чектин суммасы муну көзөмөлдөйт ) , колдонуучунун sql аты, миграцияны иштетүү датасы, аткаруу убактысы жана натыйжасы (ийгorктүү же ийгorксиз) . Бир жолу жазылган миграция келечекте өзгөртүлбөшү керек. Анда кемчorк болсо да. Бардык өзгөрүүлөр жаңы миграция аркылуу гана ишке ашат. Бул өтө маанилүү. Эмне болорун көрсөтүү үчүн, келгиле, сценарийибизди бир аз өзгөртүп, аны кайра иштетүүгө аракет кылалы. Миграциябыздагы өлкө tableсына бир жазууну кошолу: "Адан Яга чейин Java долбоору": SpringBoot + Flyway - 21жана негизги ыкманы иштетип, биз мына ушуну алабыз: "Адан Яга Java долбоору": SpringBoot + Flyway - 22Мен күткөндөй, flyway скрипт өзгөртүлгөнүн тааныды жана миграцияны аткарган жок. Кээ бир учурларда, чындыгында жаңыртылган миграцияны жүргүзүү керек болушу мүмкүн жана flyway муну өткөрүп жибериши үчүн flyway_schema_history tableсындагы жазууну өчүрүп, андан соң жаңыртылган миграцияны жүргүзүү керек. Бул нормалдуу жүрүм-турум эмес жана андай болбошу керек, бирок сиз маселени чечүүнүн бул ыкмасы жөнүндө да бorшиңиз керек. Биринчи миграция менен алектендик. Эми мен дагы бир миграцияны кошкум келет, маалыматтар базасы жөнүндө макалада айтылгандай, өлкөлөр жөнүндө маалыматтар: файл V00002__Add_test_data_to_country.sql"Адан Яга Java долбоору": SpringBoot + Flyway - 23 Жана дагы бир жолу негизги ыкманы иштетели: "Адан Яга Java долбоору": SpringBoot + Flyway - 24Журналдардан көрүнүп тургандай, миграция башталганга чейин маалымат базасы болгон. 00001 versionсында, ошондуктан бул versionдан кийинки бардык миграциялар. Андан кийин, 00002 versionсы ишке киргизorп, ийгorктүү болду. Келгиле, текшерип көрөлү, же өлкөдө үч жазуу буга чейин эле базада болот деп ишенесиңби?)) Мен текшерет элем, далил: "Java долбоору Адан Яга": SpringBoot + Flyway - 25Ушундай бир нерсе. Долбоорду кайра иштетсеңиз, маалымат базасы талап кылынган versionга толугу менен жооп бергендиктен, flyway жөн гана жылдырып көчүрүүнү өткөрүп жиберет.

Корутунду

Бул жолу биз SpringBoot менен бирге маалымат базасын көчүрүү куралын кантип түшүнүүнү жана колдонууну үйрөндүк. Бул маалымат Flyway үлгүсүн колдонуп, маалымат базасынын versionсын башкаруу куралы эмне экенин түшүнүү үчүн зарыл. Достор, мен көрсөткөн долбоордун баштапкы codeу Github сайтында биздин уюмда жарыяланган . Эгер сизге мисал жакса, ага жылдыз бериңиз , ошондо мен менин ишим пайдалуу жана улантууга татыктуу экенин түшүнөм. Салт боюнча, мен өзүмдүн Github аккаунтума жазылууну сунуштайм . Ал аркылуу мен ачык булак боюнча бардык ишимди жана менин макалаларымды дайыма коштоп жүргөн бардык демо-долбоорлорду жүргүзөм. Окуу үчүн баарына рахмат. Кийинки жолу арызыбызды жазабыз. Келечекте Докерде керектүү теория болот, бирок биз аны практика менен катуу суюлтабыз.

пайдалуу шилтемелер

Бүгүнкү күндө көптөгөн пайдалуу шилтемелер жок. Евгенийдин видеосуна көңүл буруңуз, бул чындап эле татыктуу!
  1. Жазында долбоорлорду түзүү үчүн сайт
  2. Евгений Борисов — Жазгы куруучу
  3. Flyway үчүн жазында documentтер

Сериядагы бардык материалдардын тизмеси ушул макаланын башында.

Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION