JavaRush /وبلاگ جاوا /Random-FA /SpringBoot + Flyway - "پروژه جاوا از A تا Z"
Roman Beekeeper
مرحله

SpringBoot + Flyway - "پروژه جاوا از A تا Z"

در گروه منتشر شد
مقاله ای از مجموعه ای در مورد ایجاد یک پروژه جاوا (لینک به سایر مواد در پایان است). هدف آن تجزیه و تحلیل فناوری های کلیدی است که نتیجه آن نوشتن یک ربات تلگرام است. در این قسمت سعی داریم SpringBoot و Flyway را راه اندازی کنیم. حداقل مقدار تئوری، همانطور که دوست دارید))) مقایسه نهایی Flyway/Liquibase را برای مدت نامحدودی حذف می کنیم و به اصل مطلب می رسیم. و حتی به این ترتیب از قبل طولانی شده است. برای اینکه Flyway را دوبار توصیف نکنم، تصمیم گرفتم فوراً آن را به پروژه آینده JRTB خود اضافه کنم."پروژه جاوا از A تا Z": SpringBoot + Flyway - 1

به عنوان بخشی از این باید چه کاری انجام دهیم؟

  1. یک برنامه SpringBoot مبتنی بر Maven راه اندازی کنید.
  2. Flyway را به آنجا اضافه کنید: خوشبختانه، آنها به راحتی ادغام می شوند.
  3. یک طرح واره برای جداولی که در پایگاه داده مثال داریم اضافه کنید.
به این ترتیب نحوه کار با Flyway را یاد خواهیم گرفت. چرا یک پروژه جداگانه، و نه بلافاصله به JRTB ما؟ زیرا بعداً، هرکسی که بخواهد بفهمد چگونه این کار را انجام دهد، پروژه ای با مثال و مقاله ای خواهد داشت که کار با آن را شرح می دهد. خب بریم!

flyway چیست

برای استفاده از چیزی، ابتدا باید بفهمید که چیست و چرا. Flyway یک ابزار کنترل نسخه پایگاه داده است. کلمات معروف هستند، اما به نوعی درک اضافه نشده است، درست است؟ بیایید سعی کنیم مشکلی را که فلای وی حل می کند را شرح دهیم. فرض کنید یک پروژه داریم. مانند همه چیز در دنیای ما، کامل نیست، بنابراین امکان برنامه ریزی و ترسیم نسخه نهایی پروژه وجود نداشت. هر بار که برخی از تفاوت های ظریف بی توجه ظاهر می شوند. این پروژه در کار خود از پایگاه داده استفاده می کند. البته اگر پروژه تغییر کند، ممکن است ساختار پایگاه داده نیز تغییر کند. فرض کنید یک فیلد جدید برای یکی از موجودیت های پروژه خود اضافه می کنیم. چگونه انجامش بدهیم؟
  1. این فیلد را به موجودیت ما اضافه کنید، همه چیز را به روز کنید تا منطق تجاری کار کند.
  2. پایگاه داده را به روز کنید. تنها راه ممکن این است که آن را به صورت دستی انجام دهید. برای این کار باید وارد شوید و اسکریپت sql لازم را ثبت کنید.
نکته دوم سوالات زیادی را مطرح می کند:
  1. اما اگر بیش از یک مکان داریم که پروژه خود را در آن مستقر می کنیم، آیا این کار در هر یک از آنها باید انجام شود؟
  2. و اگر بخواهیم به عقب برگردیم، چگونه متوجه شویم که ساختار پایگاه داده در حال حاضر دقیقا در چه وضعیتی است؟
  3. چگونه می توانیم مطمئن شویم که تغییر پایگاه داده موفقیت آمیز بوده است؟
  4. چگونه می توانم این فرصت را داشته باشم که تمام تغییرات پایگاه داده ای که در پروژه رخ داده است را ردیابی کنم؟
اگر این کار را به صورت دستی انجام دهید، پاسخ ها بهترین نخواهند بود... برای جلوگیری از همه این مشکلات، می توانید از ابزار مهاجرت پایگاه داده استفاده کنید. یکی از اینها Flyway است. شغل او چیست؟ به عنوان بخشی از پروژه، ما فایل‌های sql جداگانه (به اصطلاح migrations) را ذخیره می‌کنیم که هر کاری را که با پایگاه داده انجام می‌دهیم در یک زمان ذخیره می‌کند. همه مهاجرت‌ها دقیقاً به ترتیب خاصی انجام می‌شوند، که به شما امکان می‌دهد تغییرات در ساختار و داده‌های پایگاه داده را ردیابی کنید (اغلب با استفاده از مهاجرت، داده‌های آزمایشی به پروژه اضافه می‌شوند تا زمانی که در برخی از سرورها مستقر می‌شوند، قبلاً مقداری وجود داشته باشد. مقادیری که می توانید پروژه را با آنها آزمایش کنید). پس از گذراندن آزمایشات، مهاجرت ها هنگام ساخت پروژه راه اندازی می شوند. آنها به پایگاه داده متصل می شوند و مهاجرت را انجام می دهند. اگر مهاجرت‌ها قبلاً در این پایگاه داده انجام شده باشد، Flyway به سادگی آنها را رد می‌کند (داده‌های مهاجرت و وضعیت آنها را در یک جدول جداگانه در پایگاه داده ذخیره می‌کند که به مدیریت آنها کمک می‌کند)، و اگر برخی از مهاجرت‌ها ناموفق بود، پروژه ساخت و نصب (استقرار) آن در سرور متوقف خواهد شد. سعی کردم تا آنجا که ممکن است آن را با جزئیات توصیف کنم. اگر هنوز همه چیز کاملاً روشن نیست، مهم نیست: با تمرین، درک فرا خواهد رسید.

SpringBoot + Flyway را راه اندازی کنید

چکمه بهار چیست؟

چه چیزی را راه اندازی می کنیم؟... برای اینکه بفهمید چه کاری و چرا انجام می دهیم، باید تصمیم بگیرید که SpringBoot چیست. اول، اجازه دهید سریع (خوب، خیلی سریع) در مورد بهار صحبت کنیم . در حال حاضر، این استاندارد بالفعل صنعت در توسعه برنامه های کاربردی سرور در جاوا است. استاندارد چه چیزی؟ چگونه می توانم این را برای شما توضیح دهم؟ بهار اسکلت برنامه است که سپس "گوشت" را روی آن پرتاب می کنیم - منطق تجاری ما. با کمک Spring (از این پس از این مقاله ردیابی استفاده خواهم کرد تا زمان را برای تغییر زبان تلف نکنم:D)) بهار شروعی به ما می دهد که از آن شروع به انجام همه کارها می کنیم. این چند وجهی، چند مدولار است:
  1. آیا می خواهید با پایگاه داده کار کنید؟ رابطه میخوای؟ غیر رابطه ای میخوای؟ در اینجا ما با Spring Data هستیم.
  2. آیا می خواهید با درخواست های http کار کنید؟ در اینجا شما بروید، وب بهار (Spring MVC).
  3. آیا به یک ظرف برای همه اشیاء خود در یک مکان نیاز دارید؟ در اینجا هسته بهار است.
  4. آیا باید امنیت پروژه را طوری تنظیم کنید که نقش ها و زنجیره فرماندهی متفاوتی وجود داشته باشد؟ امنیت بهار.
  5. درست زمانی که فکر می‌کردید داشتن چنین چیزی خوب است، معلوم شد که Spring در حال حاضر آنچه شما نیاز دارید را دارد و به سرعت و به راحتی یکپارچه می‌شود.
بنابراین، می‌توان گفت که این فقط یک چارچوب (چنین کتابخانه عظیم) نیست، بلکه یک اکوسیستم کامل است که با سرعتی سرسام‌آور در حال توسعه است. برای درک اینکه Spring Core چیست، یعنی پایه ای که ماژول ها به آن متصل می شوند، به شما توصیه می کنم یک نسخه نمایشی زنده را در ایجاد چارچوب خود تماشا کنید. مجری آن Evgeny Borisov، یک مرد بسیار باحال در زمینه جاوا و بهار است. هر کاری که او کرد انجام دهید تا کار بهار برای شما روشن تر شود. SpringBoot به نوبه خود اوج همه چیز آنهاست. جادوی آب خالص. حداقل تنظیمات برای اولین راه اندازی برنامه. البته این به شما درک درستی از نحوه استفاده و کارهایی که باید انجام دهید را نمی دهد. اما قبل از عجله در اعماق توسعه، شما باید به همه چیز از دید پرنده نگاه کنید.

راه اندازی SpringBoot

از آنجایی که ما قبلاً فهمیدیم Maven چیست، بیایید یک پروژه جدید برای نیازهای خود ایجاد کنیم. برای انجام این کار، فقط باید به وب سایتی که مخصوص این موضوع ایجاد شده است بروید. اسمش Spring Initializr هست . "پروژه جاوا از A تا Z": SpringBoot + Flyway - 2در اینجا باید موارد مورد نیاز خود را پر کرده و انتخاب کنید:
  1. ابزار ساخت پروژه gradle یا maven است. همانطور که می بینید، دیگر حتی به مورچه اشاره نمی شود. این یک راهنمایی خوب در مورد اینکه کدام ابزار ساخت ارزش وقت شما را دارد است.
  2. زبانی که می توانید با آن بنویسید جاوا، کاتلین، groovy است. همه چیز در اینجا ساده است: همه آنها شبیه JVM هستند و به راحتی کدهای جاوا را اجرا می کنند. به هر حال، ارزش دیدن کاتلین را دارد. Groovy رک و پوست کنده جالب نشده است (زمانی بود که آنها به شیارها روی آوردند، اما به سرعت گذشت).
  3. نسخه Spring... در اینجا باید بدانید که نسخه های قسمت اصلی Spring و ماژول های آن سازگار هستند.
  4. داده های پروژه من قبلاً این موارد را شرح داده ام.
  5. ما انتخاب می کنیم که کدام بایگانی جمع آوری شود - کوزه یا جنگ.
  6. خوب، نسخه جاوا مورد علاقه ما. و اخیراً تعداد زیادی از این نسخه ها وجود داشته است ... آنها سال ها منتظر بودند و اکنون دو سال در سال وجود دارد.
در مورد ما، ما این پروژه را در سازمان JavaRush Community منتشر خواهیم کرد ، بنابراین اطلاعات مربوط به پروژه مناسب خواهد بود:
  1. Maven - بیهوده نیست که قبلاً در این مورد با شما صحبت کردیم.
  2. جاوا عزیز ماست :D
  3. بیایید نسخه 2.2.11 را بگیریم. چرا جدیدترین نیست؟ زیرا هرچه جدیدتر باشد، احتمال وجود برخی از اشکالات در آن بیشتر است. برای ما مهم نیست کدام نسخه، اما نسخه قدیمی تر قابل اعتمادتر خواهد بود. بنابراین 2.2.11 را انتخاب می کنیم.
  4. گروه: com.github.javarushcommunity
  5. مصنوع: Springboot-flyway-demo
  6. نام: SpringBoot + Flyway Demo
  7. توضیحات: پروژه یکپارچگی بین SpringBoot و Flyway را نشان می دهد . (بله، توانایی نوشتن مستندات بخش مهمی از توسعه است :))
  8. نام بسته: com.github.javarushcommunity.springbootflywaydemo . در اینجا آنها بلافاصله یک بسته اولیه با کلاسی برای ما ایجاد می کنند که برنامه ما را راه اندازی می کند.
  9. بسته بندی: شیشه
  10. جاوا: 8. از لوکوموتیو جلوتر نرویم و هشت خوب قدیمی را بگیریم. چرا 11 نه؟ برای چی؟ برای مثال ما، من نکته ای را نمی بینم.
"پروژه جاوا از A تا Z": SpringBoot + Flyway - 3حالا بیایید ماژول ها را اضافه کنیم. ما باید با Flyway یکپارچه شویم. همچنین می توانید چیزی مربوط به MySQL و Spring Data را اضافه کنید. بیایید یک لومبوک دیگر اضافه کنیم (این یک چیز بسیار ضروری است، فقط فعلاً به من اعتماد کنید :D)) برای این کار، روی ADD DEPENDENCIES ... کلیک کنید و هر چیزی را که نیاز دارید انتخاب کنید: "پروژه جاوا از A تا Z": SpringBoot + Flyway - 4به این ترتیب Flyway را اضافه می کنیم. "پروژه جاوا از A تا Z": SpringBoot + Flyway - 5لومبوک... و غیره. در نتیجه، دریافت می کنیم: "پروژه جاوا از A تا Z": SpringBoot + Flyway - 6هو ... ما همه چیز را پر کردیم)) اکنون روی GENERATE کلیک کنید ... و تمام - آرشیو با پروژه تولید شده آماده است :) همچنین یک چیز جالب مانند اشتراک گذاری وجود دارد ... که به شما پیوندی به صفحه ای که به تازگی پر کرده اید می دهد. یعنی این چیزی است که من تولید کردم . و حتی اگر مشکلی پیش بیاید، همیشه می توانید با استفاده از پیوند بررسی کنید. در مرحله بعد، باید پروژه ایجاد شده را به مخزن Git پیوند دهیم، بنابراین پروژه Springboot-flyway-demo ایجاد شده را شبیه سازی کرده و آن را از طریق IDEA دانلود می کنیم. برای انجام این کار، باید ایده را باز کنید و File -> New -> Project from Existing Sources را انتخاب کنید... : "پروژه جاوا از A تا Z": SpringBoot + Flyway - 7اکنون URL را اضافه کنید و روی Clone کلیک کنید . مرحله بعدی این است که اجزای داخلی پروژه تولید شده را به داخل پروژه ای که شبیه سازی کردیم منتقل کنیم. سردرگم؟ الان بهت نشون میدم من آن را از حالت فشرده خارج کردم و مجموعه فایل های زیر را دریافت کردم: "پروژه جاوا از A تا Z": SpringBoot + Flyway - 8این فایل ها باید به پروژه کلون شده منتقل شوند. مانند مقاله قبلی، اجازه دهید pom.xml را به عنوان یک پروژه maven اضافه کنیم: "پروژه جاوا از A تا Z": SpringBoot + Flyway - 9اکنون ما علاقه مندیم که ببینیم چه چیزی برای ما ایجاد شده است. اگر تمام پوشه ها را در src و بیشتر باز کنید، سلسله مراتب معمول در پروژه های Maven را مشاهده خواهید کرد که در مقاله قبلی به آن پرداختیم . برای کسانی که آن را نخوانده اند، بخوانند! "پروژه جاوا از A تا Z": SpringBoot + Flyway - 10مشاهده می شود که ما یک کلاس Application داریم و برنامه SpringBoot ما با استفاده از آن راه اندازی می شود. به لطف افزونه Maven برای SpringBoot، اکنون وظیفه ای را که برای Maven نیاز داریم، یعنی Spring-boot:run داریم. از کجا می توانیم این اطلاعات را پیدا کنیم؟ در سمت راست، صفحه Maven و پروژه ما را باز می کنیم: "پروژه جاوا از A تا Z": SpringBoot + Flyway - 11خطایی رخ می دهد، و ما نمی توانیم آن را بخوانیم، چیزی شبیه به این خواهیم دید: "پروژه جاوا از A تا Z": SpringBoot + Flyway - 12برای دریافت اطلاعات بیشتر، برای سرعت می توانیم روش اصلی را اجرا کنیم. از کلاس Application: "پروژه جاوا از A تا Z": SpringBoot + Flyway - 13و سپس دلیل واقعی را خواهیم دید: "پروژه جاوا از A تا Z": SpringBoot + Flyway - 14در اینجا اطلاعات بیشتری وجود دارد و می توانید کاری با آن انجام دهید. مشکل چیه؟ ما وابستگی های مرتبط با پایگاه داده داریم و بنابراین باید تنظیماتی را برای اتصال به آن ارائه دهیم. برای انجام این کار، در گوگل جستجو می کنیم و متوجه می شویم که باید تنظیمات زیر را به 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
روش اصلی را دوباره اجرا می کنیم و می گیریم: "پروژه جاوا از A تا Z": SpringBoot + Flyway - 15حالا باید حداقل یک مهاجرت اضافه کنیم. برای ایجاد صحیح مهاجرت، باید الگوی زیر را بگیرید: V<VERSION>__<NAME>.sql با استفاده از این الگو، یک فایل مهاجرت به نام V00001__Create_country_table.sql در پوشه مناسب ایجاد می کنیم: /src/main/resources/ db.migration/ . بیایید یک جدول کشور در آن ایجاد کنیم. بیایید اسکریپت را از مقاله دوم در مورد پایگاه داده بگیریم . "پروژه جاوا از A تا Z": SpringBoot + Flyway - 16قبل از شروع، بیایید وارد شویم و یک پایگاه داده برای کار ایجاد کنیم: flyway_demo_db. بیایید این کار را از طریق MysqlWorkbench انجام دهیم: "پروژه جاوا از A تا Z": SpringBoot + Flyway - 17اکنون می‌توانیم روش اصلی را دوباره اجرا کنیم: "پروژه جاوا از A تا Z": SpringBoot + Flyway - 18همه چیز درست شد، اما از آنجایی که هنوز چیزی در پروژه نداریم، کار به پایان رسید. با این حال، از لاگ ها ( بخوانید لاگ ها چیست ) مشخص است که:
  1. با موفقیت به پایگاه داده متصل شد.
  2. مهاجرت تایید شده است و همه چیز اوکی است.
  3. Flyway یک جدول برای مدیریت مهاجرت ایجاد کرده است.
  4. و چه مهاجرت 00001 آغاز شد - ایجاد کشور موفقیت آمیز بود.
برای بررسی این موضوع می توانید بروید و ببینید در پایگاه داده چه کاری انجام می شود. پس بیایید به سرور MySQL خود برویم و ببینیم با جداول موجود در پایگاه داده flyway_demo_db چه خبر است: $ USE flyway_demo_db; $SHOW TABLES; "پروژه جاوا از A تا Z": SpringBoot + Flyway - 19همانطور که انتظار داشتم، یک مهاجرت اتفاق افتاد که طی آن جدول کشور ایجاد شد و جدول flyway_schema_history ظاهر شد که اطلاعات مهاجرت ها را ذخیره می کند. بیایید بیشتر برویم و ببینیم چه رکوردهایی وجود دارد (و آیا اصلاً وجود دارد یا خیر). $SELECT * FROM flyway_schema_history. "پروژه جاوا از A تا Z": SpringBoot + Flyway - 20اینجا ضبط است، تنها. این شامل بسیاری از داده های جالب است. نسخه، توضیح مهاجرت، نوع SQL (و شاید XML)، نام خود اسکریپت، checksum ( این چیزی شبیه به کد هش کد است که برای بررسی اینکه آیا مهاجرت تغییر کرده است یا خیر استفاده می شود. این کار انجام می شود. در صورتی که ما یک انتقال در پایگاه داده انجام دادیم و سپس اصلاح شد: این کار نمی تواند انجام شود، همه تغییرات فقط از طریق یک مهاجرت جدید انجام می شود و برای جلوگیری از این اتفاق، مبلغ چک این را نظارت می کند، نام sql کاربر، پردازش مهاجرت تاریخ، زمان اجرا و نتیجه (موفق یا ناموفق) . مهاجرتی که یک بار نوشته شده است نباید در آینده تغییر کند. حتی اگر نقصی در آن وجود داشته باشد. همه تغییرات فقط از طریق یک مهاجرت جدید صورت می گیرد. این خیلی مهمه. برای اینکه نشان دهیم چه اتفاقی خواهد افتاد، بیایید اسکریپت خود را کمی تغییر دهیم و دوباره آن را اجرا کنیم. بیایید یک ورودی به جدول کشور در مهاجرت خود اضافه کنیم: "پروژه جاوا از A تا Z": SpringBoot + Flyway - 21و روش اصلی را اجرا کنیم و این چیزی است که به دست می‌آید: "پروژه جاوا از A تا Z": SpringBoot + Flyway - 22همانطور که انتظار داشتم، flyway متوجه شد که اسکریپت تغییر کرده است و مهاجرت را انجام نداده است. در برخی موارد، ممکن است واقعاً نیاز به اجرای یک مهاجرت به‌روزرسانی شده باشد، و برای اینکه flyway از این کار رد شود، باید ورودی جدول flyway_schema_history را حذف کنید و سپس مهاجرت به‌روز شده را اجرا کنید. این رفتار عادی نیست و نباید چنین باشد، اما باید در مورد این روش حل مشکل نیز بدانید. به هجرت اول پرداختیم. حالا می‌خواهم مهاجرت دیگری را با داده‌های مربوط به کشورها اضافه کنم، همانطور که در مقاله مربوط به پایگاه داده بود: فایل V00002__Add_test_data_to_country.sql"پروژه جاوا از A تا Z": SpringBoot + Flyway - 23 و اجازه دهید دوباره روش اصلی را اجرا کنیم: "پروژه جاوا از A تا Z": SpringBoot + Flyway - 24از لاگ‌ها مشخص است که قبل از شروع مهاجرت، پایگاه داده در نسخه 00001، بنابراین همه مهاجرت ها بعد از این نسخه. در مرحله بعد، نسخه 00002 راه اندازی شد و موفقیت آمیز بود. بیایید بررسی کنیم، یا آیا از قبل به من اعتقاد دارید که سه رکورد در کشور قبلاً در پایگاه داده وجود دارد؟)) من بررسی می کنم، بنابراین اثبات: "پروژه جاوا از A تا Z": SpringBoot + Flyway - 25چیزی شبیه به این. اگر دوباره پروژه را اجرا کنید، flyway به سادگی از انتقال مهاجرت صرف نظر می کند، زیرا پایگاه داده کاملاً با نسخه مورد نیاز مطابقت دارد.

نتیجه

این بار نحوه درک و استفاده از ابزار انتقال پایگاه داده در ارتباط با SpringBoot را یاد گرفتیم. این اطلاعات برای درک اینکه ابزار کنترل نسخه پایگاه داده چیست، با استفاده از Flyway به عنوان مثال، ضروری است. دوستان سورس کد پروژه ای که نشون دادم در سازمان ما در Github منتشر شده است . اگر مثال را دوست دارید، به آن ستاره بدهید ، و من متوجه می شوم که کار من مفید است و واقعا ارزش ادامه دادن دارد. به طور سنتی، پیشنهاد می کنم در حساب Github من مشترک شوید . از طریق او تمام کارهایم را بر روی متن باز و تمام پروژه های نمایشی که همیشه با مقالات من همراه هستند انجام می دهم. با تشکر از همه برای خواندن. دفعه بعد درخواست خود را خواهیم نوشت. تئوری داکر ضروری در آینده وجود خواهد داشت، اما ما آن را به شدت با تمرین رقیق خواهیم کرد.

لینک های مفید

امروزه لینک های مفید زیادی وجود ندارد. به ویدیوی Evgeniy توجه کنید، واقعا ارزشش را دارد!
  1. وب سایت ایجاد پروژه در بهار
  2. Evgeniy Borisov - سازنده بهار
  3. مستندات در بهار برای Flyway

فهرستی از تمام مواد این مجموعه در ابتدای این مقاله است.

نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION