Стаття із серії про створення Java-проекту (посилання на інші матеріали – наприкінці). Її мета — аналіз ключових технологій, результат — написання телеграм-бота. У цій частині пробуємо запустити SpringBoot і до нього – Flyway. Мінімальна кількість теорії, як ви любите))) Підсумкове порівняння Flyway/Liquibase опускаємо на невизначений час і переходимо до суті. А то й так він уже затягнувся. Щоб двічі не описувати Flyway, вирішив його одразу додавати до нашого майбутнього проекту JRTB.
багатоликий багатомодульний:
Що в рамках цього потрібно зробити?
- Запустити SpringBoot додаток на базі Maven.
- Додати туди Flyway: добре, що вони легко інтегруються.
- Додати схему таблиць, які у нас у прикладі бази даних.
Що таке flyway
Щоб щось використати, потрібно спочатку з'ясувати, що це таке і навіщо. Flyway — інструмент для контролю версії бази даних. Слова відомі, але якось розуміння не додалося, так? Спробуємо описати проблему, яку вирішує flyway. Допустимо, у нас є проект. Як і все у нашому світі, він не досконалий, тому спланувати та скласти остаточну версію проекту не вийшло. Щоразу з'являються ті чи інші невраховані нюанси. Проект у своїй роботі використовує БД. Зрозуміло, за зміни проекту може змінитися і структура бази даних. Допустимо, ми додаємо нове поле для однієї з сутностей нашого проекту. Як це зробити?- Додати це поле до нашої сутності, оновити все, щоб бізнес логіка працювала.
- Оновити базу даних. Єдиний можливий спосіб зробити це вручну. Для цього потрібно зайти та прописати необхідний SQL скрипт.
- а якщо у нас не одне місце, де ми розгортаємо наш проект, то це у кожному з них треба робити?
- а якщо ми захочемо повернутися назад, як ми дізнаємося, в якому стані зараз знаходиться структура БД?
- як ми будемо впевнені, що зміна БД пройшла успішно?
- Як отримати можливість відстежити всі зміни БД, які пройшли на проекті?
Запускаємо SpringBoot + Flyway
Що таке Spring Boot
А що ж таке запускаємо? Щоб зрозуміти, що і навіщо ми робимо, потрібно визначитися з тим, що таке SpringBoot. Спочатку швидко поговоримо (ну дуже швидко) про Spring . На даний момент це де-факто промисловий стандарт у розробці серверних програм на Java. Стандарт чого? Як вам це пояснити. Spring - це скелет програми, на який ми потім накидаємо "м'ясо" - нашу бізнес-логіку. За допомогою спрингу (тут і далі використовуватиму цю кальку, щоб не витрачати час на перемикання мови :D )) Спрінг дає нам старт, з якого ми починаємо все робити. Він- Хочеш працювати з базою даних? Хочеш із реляційною? Хочеш із нереляційною? Ось, будь ласка, у нас є Spring Data.
- Хочеш працювати з http запитами? Ось тобі, будь ласка, Spring Web (Spring MVC).
- Тобі потрібний контейнер для всіх об'єктів в одному місці? Ось Spring Core.
- Потрібно налаштувати безпеку на проекті та так, щоб були різні ролі та субординація? Spring Security.
- Ти тільки подумав про те, що добре мати таку штуку, так виявиться, що у Спрінга вже є те, що тобі потрібно, і воно швидко і легко інтегрується.
Запускаємо SpringBoot
Оскільки ми вже зналися на тому, що таке мавен, давайте створимо новий проект для наших потреб. Для цього просто потрібно перейти на сайт, спеціально створений для цієї справи. Називається він Spring Initializr . Тут потрібно заповнити та вибрати необхідне:- Інструмент зі збирання проекту - gradle або maven. Як бачите, про Ant вже й не згадують. Це хороша підказка про те, яким засобам складання варто приділити час.
- Мова, якою можна писати - java, kotlin, groovy. Тут все просто: всі вони JVM подібні та спокійно запускають Java код. До речі, варто подивитись і на Котлін. Груві вже відверто став нецікавим (був час, коли на груві переходабо, але він швидко пройшов).
- Версію спрингу… Тут треба розуміти, що версії головної частини спрингу та його модулів узгоджені.
- Дані щодо проекту. Я вже описував ці речі.
- Вибираємо, в який архів буде збиратися - Jar чи War.
- Ну і версію джави нашої коханої. А то останнім часом розлучилося цих версій... багато) То чекали роками, а тепер по дві на рік.
- Maven - не дарма ж ми говорабо з вами про це раніше.
- Java - наша рідна :D
- Версію візьмемо 2.2.11. Чому не найновішу? Тому що чим новіший, тим більше шансів, що там можуть бути якісь косяки. Для нас не принципово, яка саме версія, а більш стара буде надійнішою. Тому обираємо 2.2.11.
- Group: com.github.codegymcommunity
- Artifact: springboot-flyway-demo
- Name: SpringBoot + Flyway Demo
- Description: Project demonstrates integration між SpringBoot and Flyway . (Так, вміння писати документацію – це важлива частина розробки:))
- Package name: com.github.codegymcommunity.springbootflywaydemo . Тут за нас відразу ж створять базовий пакет із класом, який запустить наш додаток.
- Packaging: Jar
- Java: 8. Не будемо йти попереду паровоза і візьмемо стару добру вісімку. Чому не 11? А навіщо? Для нашого прикладу не бачу сенсу.
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
Запускаємо ще раз main метод і отримуємо: Тепер потрібно додати хоча б одну міграцію. Щоб правильно скласти міграцію, потрібно взяти наступний шаблон: V<VERSION>__<NAME>.sql Керуючись ним, створимо файл міграції з ім'ям V00001__Create_country_table.sql у відповідній папці: /src/main/resources/db.migration/ . У ньому створимо таблицю country. Скрипт візьмемо з другої статті про БД . Перед запуском зайдемо та створимо БД для роботи: flyway_demo_db. Зробимо це через MysqlWorkbench: Тепер можна запустити ще раз main метод: Все вийшло, але так як у нас нічого ще немає в проекті, він закінчив роботу. Однак видно з логів (що таке логи — ось почитайте), що:
- Успішно підключабося до БД.
- Пройшла валідація міграції і з нею все прибл.
- Flyway створив таблицю для керування міграціями.
- І те, що розпочала міграція 00001 — створення country пройшло успішно.
Висновок
Цього разу ми навчабося сяк-так розуміти і використовувати інструмент для міграції БД у зв'язці зі SpringBoot. Ця інформація потрібна для розуміння того, що таке інструмент контролю версій баз даних на прикладі Flyway. Друзі, вихідники проекту, який я показав, опубліковані в нашій організації на гітхабі . Якщо вам подобається приклад, ставте йому зірку , і я розумітиму, що моя робота корисна і її реально варто продовжувати. Традиційно пропоную підписатися на мій гітхаб акаунт. Через нього я веду всю свою роботу з open source і всі ті демо-проекти, які незмінно супроводжують мої статті. Дякую всім за прочитання. Наступного разу вже писатимемо наш додаток. Буде ще в майбутньому необхідна теорія з докеру, але ми її розбавимо практикою.Корисні посилання
Сьогодні не так вже й багато корисних посилань. Зверніть увагу на відео Євгена, воно дійсно варте того!- Сайт для створення проектів на спрингу
- Євген Борисов - Spring-будівельник
- Документація у спрингу по Flyway
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ