JavaRush /Java блогы /Random-KK /SpringBoot + Flyway - «A-дан Я-ға Java жобасы»
Roman Beekeeper
Деңгей

SpringBoot + Flyway - «A-дан Я-ға Java жобасы»

Топта жарияланған
Java жобасын жасау туралы сериядан мақала (басқа материалдарға сілтемелер соңында). Оның мақсаты – негізгі технологияларды талдау, нәтижесі – телеграмма ботын жазу. Бұл бөлімде біз SpringBoot және Flyway іске қосуға тырысамыз. Теорияның ең аз мөлшері, қалауыңыз бойынша))) Біз Flyway/Liquibase соңғы салыстыруын белгісіз уақыт кезеңіне өткізбейміз және нүктеге жетеміз. Солай болса да, ол әлі де созылып кетті. Flyway-ді екі рет сипаттамау үшін мен оны болашақ JRTB жобамызға бірден қосуды шештім.«А-дан Я-ға Java жобасы»: SpringBoot + Flyway - 1

Осының бір бөлігі ретінде не істеуіміз керек?

  1. Maven негізіндегі SpringBoot қолданбасын іске қосыңыз.
  2. Онда Flyway қосыңыз: бақытымызға орай, олар оңай біріктірілген.
  3. Мысал дерекқорда бар кестелер үшін схеманы қосыңыз.
Осылайша біз Flyway бағдарламасымен жұмыс істеуді үйренеміз. Неліктен біздің JRTB-ге бірден емес, бөлек жоба? Өйткені кейінірек мұны қалай жасау керектігін түсінгісі келетін кез келген адам мысалмен және онымен жұмыс істеуді сипаттайтын мақаласы бар жобаға ие болады. Ал, кеттік!

Ұшу жолы дегеніміз не

Бір нәрсені пайдалану үшін алдымен оның не екенін және неге екенін анықтау керек. Flyway - дерекқор нұсқасын басқару құралы. Сөздері белгілі, бірақ әйтеуір түсінік қосылмады, солай емес пе? Ұшу жолы шешетін мәселені сипаттауға тырысайық. Бізде жоба бар делік. Біздің әлемдегі барлық нәрсе сияқты, ол мінсіз емес, сондықтан жобаның соңғы нұсқасын жоспарлау және құрастыру мүмкін болмады. Белгілі бір ескерілмеген нюанстар пайда болған сайын. Жоба өз жұмысында мәліметтер қорын пайдаланады. Әрине, жоба өзгерсе, дерекқор құрылымы да өзгеруі мүмкін. Жобамыздағы нысандардың бірі үшін жаңа өріс қостық делік. Бұны қалай істейді?
  1. Бұл өрісті біздің нысанға қосыңыз, бизнес логикасы жұмыс істейтіндей етіп бәрін жаңартыңыз.
  2. Дерекқорды жаңартыңыз. Мүмкін болатын жалғыз әдіс - оны қолмен жасау. Мұны істеу үшін сізге кіріп, қажетті sql сценарийін тіркеу керек.
Екінші тармақ көптеген сұрақтар тудырады:
  1. Бірақ егер бізде жобаны орналастыратын бірнеше орын болса, онда мұны олардың әрқайсысында жасау керек пе?
  2. және егер біз қайтып оралғымыз келсе, дерекқор құрылымы қазір қандай күйде екенін қайдан білеміз?
  3. Дерекқорды өзгерту сәтті болғанына қалай сенімді боламыз?
  4. Жобада орын алған барлық дерекқор өзгерістерін қадағалау мүмкіндігін қалай алуға болады?
Егер сіз мұны қолмен жасасаңыз, жауаптар ең жақсы болмайды... Барлық осы қиындықтарды болдырмау үшін дерекқорды тасымалдау құралын пайдалануға болады. Солардың бірі - Flyway. Оның жұмысы қандай? Жобаның бөлігі ретінде біз дерекқормен бір уақытта жасайтын барлық нәрсені сақтайтын жеке sql файлдарын (көшірулер деп аталатын) сақтаймыз. Барлық тасымалдаулар қатаң түрде белгілі бір тәртіпте жүреді, бұл дерекқордың құрылымы мен деректеріндегі өзгерістерді бақылауға мүмкіндік береді (көбінесе көшіруді пайдалана отырып, сынақ деректері жобаға қосылады, сондықтан ол қандай да бір serverге орналастырылған кезде ол әлдеқашан бар. жобаны сынауға болатын мәндер). Сынақтардан өткеннен кейін, жоба салынған кезде көшірулер іске қосылады. Олар дерекқорға қосылып, тасымалдауды орындайды. Егер осы дерекқорда көшірулер әлдеқашан жүзеге асырылған болса, онда ұшу жолы оларды жай ғана өткізіп жібереді (ол көшіру және олардың күйі туралы деректерді дерекқордағы бөлек кестеде сақтайды, бұл оларды басқаруға көмектеседі), ал егер кейбір тасымалдау сәтсіз болса, онда жоба құрастыру және оны serverге орнату (орналастыру) тоқтатылады. Мен оны мүмкіндігінше егжей-тегжейлі сипаттауға тырыстым. Егер бәрі әлі де толық түсініксіз болса, бұл маңызды емес: тәжірибе арқылы түсіну келеді.

SpringBoot + Flyway іске қосыңыз

Көктемгі аяқ киім дегеніміз не

Біз нені іске қосып жатырмыз?... Нені және не үшін істеп жатқанымызды түсіну үшін SpringBoot деген не екенін шешу керек. Алдымен, көктем туралы тез (жақсы, өте жылдам) сөйлесейік . Қазіргі уақытта бұл Java-да serverлік қосымшаларды әзірлеуде іс жүзінде салалық стандарт болып табылады. Ненің стандарты? Мұны сізге қалай түсіндіре аламын? Көктем - бұл қосымшаның қаңқасы, оған біз «етті» тастаймыз - біздің бизнес логика. Көктемнің көмегімен (бұдан әрі мен бұл калька қағазын тілдерді ауыстыруға уақытты жоғалтпау үшін қолданамын:D)) Көктем бізге бәрін жасай бастайтын бастама береді. Ол көп қырлы, көп модульді:
  1. Мәліметтер қорымен жұмыс істегіңіз келе ме? Сіз қарым-қатынасты қалайсыз ба? Сіз қарым-қатынассыз болғыңыз келе ме? Міне, біз көктемгі деректермен келдік.
  2. http сұрауларымен жұмыс істегіңіз келе ме? Міне, көктемгі веб (Spring MVC).
  3. Сізге бір жерде барлық нысандарға арналған контейнер керек пе? Міне көктемгі өзегі.
  4. Әртүрлі рөлдер мен командалар тізбегі болуы үшін жобада қауіпсіздікті орнату керек пе? Көктемгі қауіпсіздік.
  5. Сіз мұндай нәрсенің болуы жақсы болар еді деп ойлаған кезде, көктемде сізге қажет нәрсе бар және ол тез және оңай біріктіріледі.
Демек, бұл жай ғана негіз емес (сондай үлкен кітапхана) емес, тым жоғары қарқынмен дамып келе жатқан тұтас экожүйе деп айта аламыз. Spring Core не екенін, яғни модульдер қосылған базаны түсіну үшін мен сізге жеке құрылымды құру бойынша тікелей демонстрацияны көруге кеңес беремін. Оны Евгений Борисов жүргізеді, Ява мен Көктем саласындағы өте керемет жігіт. Ол жасағанның бәрін жасаңыз, сонда көктемнің жұмысы сізге түсінікті болады. SpringBoot, өз кезегінде, оларда бар нәрсенің шыңы. Таза судың сиқыры. Қолданбаны бірінші іске қосу үшін ең аз параметрлер. Әрине, бұл сізге оны қалай пайдалану және не істеу керектігі туралы түсінік бермейді. Бірақ дамудың тереңдігіне асығар алдында бәріне құс көзімен қарау керек.

SpringBoot іске қосылуда

Біз Maven не екенін түсінгендіктен, өз қажеттіліктеріміз үшін жаңа жобаны жасайық. Мұны істеу үшін сізге осы мәселе үшін арнайы жасалған веб-сайтқа бару жеткілікті. Ол Spring Initializr деп аталады . «А-дан Я-ға Java жобасы»: SpringBoot + Flyway - 2Мұнда сізге қажет нәрсені толтырып, таңдау керек:
  1. Жобаны құрастыру құралы gradle немесе maven болып табылады. Көріп отырғаныңыздай, Құмырсқа туралы енді тіпті айтылмайды. Бұл қандай құрастыру құралдары уақытыңызды қажет ететіні туралы жақсы кеңес.
  2. Сіз жаза алатын тіл - java, kotlin, groovy. Мұнда барлығы қарапайым: олардың барлығы JVM-ге ұқсас және Java codeын оңай іске қосады. Айтпақшы, Котлинге қараған жөн. Groovy қызықсыз болды (бір кездері олар ойықтарға ауысқан, бірақ ол тез өтті).
  3. Көктем нұсқасы... Мұнда көктемнің негізгі бөлігінің және оның модульдерінің нұсқалары сәйкес келетінін түсіну керек.
  4. Жоба деректері. Мен бұл нәрселерді жоғарыда сипаттадым.
  5. Біз қандай мұрағат жиналатынын таңдаймыз - Jar немесе War.
  6. Біздің сүйікті Java нұсқасы. Ал соңғы кездері мұндай нұсқалар көп болды... Жылдар күтті, енді жылына екі болады.
Біздің жағдайда біз бұл жобаны JavaRush қауымдастығы ұйымында жариялаймыз , сондықтан жоба туралы ақпарат орынды болады:
  1. Мэвен - бұл туралы сізбен бұрын сөйлескеніміз бекер емес.
  2. Java - біздің сүйіктіміз: D
  3. 2.2.11 нұсқасын алайық. Неге ең жаңасы емес? Өйткені ол неғұрлым жаңа болса, онда қателердің болуы ықтималдығы соғұрлым жоғары болады. Біз үшін қай нұсқа маңызды емес, бірақ ескісі сенімдірек болады. Сондықтан біз 2.2.11 таңдаймыз.
  4. Топ: com.github.javarushcommunity
  5. Артефакт: Springboot-flyway-демо
  6. Атауы: SpringBoot + Flyway Demo
  7. Сипаттама: Жоба SpringBoot және Flyway арасындағы интеграцияны көрсетеді . (Иә, құжаттама жазу мүмкіндігі дамудың маңызды бөлігі болып табылады :))
  8. Пакет атауы: com.github.javarushcommunity.springbootflywaydemo . Мұнда олар бірден біз үшін қосымшаны іске қосатын сыныппен негізгі пакетті жасайды.
  9. Қаптама: банка
  10. Ява: 8. Паровоздан озып кетпей, жақсы ескі сегізді алайық. Неге 11 емес? Не үшін? Біздің мысал үшін мен мәнді көрмеймін.
«А-дан Я-ға Java жобасы»: SpringBoot + Flyway - 3Енді модульдерді қосамыз. Біз Flyway-мен интеграцияны табуымыз керек. Сондай-ақ, MySQL және Spring Data-ға қатысты бірдеңе қосуға болады. Тағы бір ломбок қосайық (бұл өте қажет нәрсе, маған сеніңіз әзірше :D)) Ол үшін ТӘУЕЛДІЛІКТІ ҚОСУ ... түймесін басып, қажеттінің барлығын таңдаңыз: «А-дан Я-ға Java жобасы»: SpringBoot + Flyway - 4Біз Flyway жолын осылай қосамыз. «А-дан Я-ға Java жобасы»: SpringBoot + Flyway - 5Ломбок... Және т.б. Нәтижесінде біз мынаны аламыз: «А-дан Я-ға Java жобасы»: SpringBoot + Flyway - 6Иа... біз бәрін толтырдық)) Енді ЖАСАУ түймесін басыңыз ... және болды - құрылған жоба бар мұрағат дайын :) Сондай-ақ, БӨЛІСУ... , ол сізге жаңа ғана толтырған бетке сілтеме береді. Яғни, міне, мен жасаған . Бірдеңе дұрыс болмаса да, сілтеме арқылы әрқашан тексере аласыз. Әрі қарай, біз жасалған жобаны Git репозиторийіне байланыстыруымыз керек, сондықтан біз құрылған springboot-flyway-demo жобасын клондаймыз және оны IDEA арқылы жүктейміз. Ол үшін идеяны ашып, Файл -> Жаңа -> Бар көздерден жобаны таңдау керек ... : «А-дан Я-ға 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/ . Онда ел кестесін жасайық. Дерекқор туралы екінші мақаланың сценарийін алайық . «А-дан Я-ға Java жобасы»: SpringBoot + Flyway - 16Бастамас бұрын, кіріп, жұмыс үшін дерекқор жасайық: flyway_demo_db. Мұны MysqlWorkbench арқылы жасайық: «А-дан Я-ға Java жобасы»: SpringBoot + Flyway - 17Енді біз негізгі әдісті қайтадан іске қоса аламыз: «А-дан Я-ға Java жобасы»: SpringBoot + Flyway - 18Барлығы орындалды, бірақ жобада әлі ештеңе болмағандықтан, ол жұмысын аяқтады. Дегенмен, журналдардан ( журналдардың не екенін оқыңыз ) анық:
  1. Дерекқорға сәтті қосылды.
  2. Тасымалдау расталды және бәрі жақсы.
  3. Flyway тасымалдауларды басқару үшін кесте жасады.
  4. Ал 00001 көші қандай басталды – елдің құрылуы сәтті болды.
Мұны тексеру үшін барып, дерекқорда не істеп жатқанын көруге болады. Сонымен MySQL serverімізге өтіп, flyway_demo_db дерекқорындағы кестелермен не болып жатқанын көрейік: $ USE flyway_demo_db; $Кестелерді көрсету; «А-дан Я-ға Java жобасы»: SpringBoot + Flyway - 19Мен күткендей, көші-қон орын алды, оның барысында ел кестесі жасалды және тасымалдаулар туралы ақпаратты сақтайтын flyway_schema_history кестесі пайда болды. Әрі қарай барып, қандай жазбалар бар екенін көрейік (және олар бар ма). $SELECT * FROM flyway_schema_history; «А-дан Я-ға Java жобасы»: SpringBoot + Flyway - 20Міне, жазба, жалғыз. Онда көптеген қызықты деректер бар. Нұсқа, тасымалдау сипаттамасы, қандай SQL түрі (және де мүмкін XML), сценарийдің өзі, бақылау сомасы ( бұл көшірудің өзгергенін немесе өзгермегенін тексеру үшін қолданылатын хэшcode сияқты нәрсе. Бұл орындалды. егер біз дерекқорда көшіруді жүзеге асырсақ, содан кейін ол түзетілді: мұны істеу мүмкін емес, барлық өзгертулер тек жаңа көшіру арқылы жасалады және мұны болдырмау үшін тексеру сомасы осыны бақылайды ) , пайдаланушы sql аты, тасымалдауды өңдеу күні, орындалу уақыты және нәтижесі (сәтті немесе сәтсіз) . Бір рет жазылған көшу болашақта өзгертілмеуі керек. Оның ішінде кемшілік болса да. Барлық өзгерістер тек жаңа көшу арқылы жүзеге асады. Бұл өте маңызды. Не болатынын көрсету үшін сценарийімізді сәл өзгертіп, оны қайтадан іске қосып көрейік. Тасымалдауда ел кестесіне бір жазба қосайық: «А-дан Я-ға Java жобасы»: SpringBoot + Flyway - 21және негізгі әдісті іске қосыңыз және біз мынаны аламыз: «А-дан Я-ға Java жобасы»: SpringBoot + Flyway - 22Мен күткендей, flyway сценарийдің өзгертілгенін мойындады және тасымалдауды орындамады. Кейбір жағдайларда шын мәнінде жаңартылған тасымалдауды іске қосу қажет болуы мүмкін және flyway мұны өткізіп жіберуі үшін flyway_schema_history кестесіндегі жазбаны жойып, содан кейін жаңартылған тасымалдауды іске қосу керек. Бұл қалыпты мінез-құлық емес және олай болмауы керек, бірақ сіз мәселені шешудің осы әдісі туралы білуіңіз керек. Біз бірінші көші-қонмен айналыстық. Енді мен деректер базасы туралы мақалада айтылғандай елдер туралы деректермен тағы бір көшіруді қосқым келеді: файл V00002__Add_test_data_to_country.sql«А-дан Я-ға Java жобасы»: SpringBoot + Flyway - 23 Ал негізгі әдісті қайтадан іске қосамыз: «А-дан Я-ға Java жобасы»: SpringBoot + Flyway - 24Журналдардан көшіру басталғанға дейін дерекқордың болғаны анық. 00001 нұсқасында, сондықтан осы нұсқадан кейінгі барлық тасымалдаулар. Содан кейін 00002 нұсқасы іске қосылды және сәтті болды. Тексеріп көрейік, әлде елдегі үш жазба дерекқорда болады дегенге сенесіз бе?)) Мен тексеретін едім, дәлел: «А-дан Я-ға Java жобасы»: SpringBoot + Flyway - 25Мынадай нәрсе. Егер жобаны қайта іске қоссаңыз, дерекқор қажетті нұсқаға толығымен сәйкес келетіндіктен, flyway жай ғана көшіруді өткізіп жібереді.

Қорытынды

Бұл жолы біз SpringBoot бағдарламасымен бірге дерекқорды тасымалдау құралын қалай түсінуге және пайдалануға болатынын білдік. Бұл ақпарат Flyway мысалында дерекқор нұсқасын басқару құралының не екенін түсіну үшін қажет. Достар, мен көрсеткен жобаның бастапқы codeы Github сайтында біздің ұйымда жарияланған . Егер сізге мысал ұнаса, оған жұлдызша беріңіз , мен менің жұмысымның пайдалы екенін және шынымен жалғастыруға тұрарлық екенін түсінемін. Дәстүрлі түрде мен Github тіркелгісіне жазылуды ұсынамын . Ол арқылы мен барлық жұмысымды ашық бастапқы codeпен және мақалаларыма үнемі ілесіп жүретін барлық демонстрациялық жобаларда жүргіземін. Оқығаныңыз үшін барлығына рахмет. Келесі жолы өтінішімізді жазамыз. Болашақта Docker-те кейбір қажетті теория болады, бірақ біз оны тәжірибемен қатты сұйылтамыз.

пайдалы сілтемелер

Бүгінгі күні пайдалы сілтемелер көп емес. Евгенийдің бейнебаянына назар аударыңыз, бұл шынымен де тұрарлық!
  1. Көктемде жобалар жасауға арналған веб-сайт
  2. Евгений Борисов — көктемгі құрылысшы
  3. Flyway үшін көктемгі құжаттама

Сериядағы барлық материалдардың тізімі осы мақаланың басында.

Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION