JavaRush /مدونة جافا /Random-AR /SpringBoot + Flyway - "مشروع Java من الألف إلى الياء"
Roman Beekeeper
مستوى

SpringBoot + Flyway - "مشروع Java من الألف إلى الياء"

نشرت في المجموعة
مقال من سلسلة حول إنشاء مشروع Java (توجد روابط لمواد أخرى في النهاية). هدفه هو تحليل التقنيات الرئيسية، والنتيجة هي كتابة روبوت برقية. في هذا الجزء، نحاول إطلاق SpringBoot وFlyway. الحد الأدنى من النظرية، كما تريد))) نحذف المقارنة النهائية لـ Flyway/Liquibase لفترة زمنية غير محددة ونصل إلى صلب الموضوع. وحتى مع ذلك فقد استمرت بالفعل. لكي لا أصف Flyway مرتين، قررت إضافته على الفور إلى مشروع JRTB المستقبلي."مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 1

ماذا علينا أن نفعل كجزء من هذا؟

  1. قم بتشغيل تطبيق SpringBoot استنادًا إلى Maven.
  2. أضف Flyway هناك: لحسن الحظ، يتم دمجها بسهولة.
  3. أضف مخططًا للجداول الموجودة في قاعدة بيانات الأمثلة.
بهذه الطريقة سوف نتعلم كيفية العمل مع Flyway. لماذا مشروع منفصل، وليس على الفور في JRTB لدينا؟ لأنه لاحقًا، أي شخص يريد فهم كيفية القيام بذلك، سيكون لديه مشروع به مثال ومقال يصف العمل به. حسنا، دعنا نذهب!

ما هو مسار الطيران

لاستخدام شيء ما، عليك أولاً معرفة ما هو ولماذا. Flyway هي أداة للتحكم في إصدار قاعدة البيانات. الكلمات معروفة جيدًا، ولكن بطريقة ما لم تتم إضافة الفهم، أليس كذلك؟ دعونا نحاول وصف المشكلة التي يحلها مسار الطيران. لنفترض أن لدينا مشروعًا. مثل كل شيء في عالمنا، فهو ليس مثاليًا، لذلك لم يكن من الممكن التخطيط ووضع النسخة النهائية للمشروع. في كل مرة تظهر بعض الفروق الدقيقة غير المحسوبة. يستخدم المشروع قاعدة بيانات في عمله. بالطبع، إذا تغير المشروع، فقد تتغير بنية قاعدة البيانات أيضًا. لنفترض أننا أضفنا حقلاً جديدًا لأحد الكيانات في مشروعنا. كيف افعلها؟
  1. أضف هذا الحقل إلى كياننا، وقم بتحديث كل شيء حتى يعمل منطق الأعمال.
  2. تحديث قاعدة البيانات. الطريقة الوحيدة الممكنة هي القيام بذلك يدويًا. للقيام بذلك، تحتاج إلى الدخول وتسجيل البرنامج النصي SQL الضروري.
النقطة الثانية تثير العديد من الأسئلة:
  1. ولكن إذا كان لدينا أكثر من مكان واحد حيث ننشر مشروعنا، فهل يجب القيام بذلك في كل واحد منهم؟
  2. وإذا أردنا العودة، كيف يمكننا أن نعرف بالضبط ما هي حالة بنية قاعدة البيانات الآن؟
  3. كيف سنتأكد من نجاح تغيير قاعدة البيانات؟
  4. كيف يمكنني الحصول على الفرصة لتتبع جميع تغييرات قاعدة البيانات التي حدثت في المشروع؟
إذا قمت بذلك يدويًا، فلن تكون الإجابات هي الأفضل... لتجنب كل هذه الصعوبات، يمكنك استخدام أداة ترحيل قاعدة البيانات. واحدة من هذه هي Flyway. ما هي وظيفته؟ كجزء من المشروع، نقوم بتخزين ملفات SQL منفصلة (ما يسمى بالترحيلات)، والتي تخزن كل ما نقوم به بقاعدة البيانات في وقت واحد. تتم جميع عمليات الترحيل بدقة بترتيب معين، مما يسمح لك بتتبع التغييرات في بنية قاعدة البيانات وبياناتها (غالبًا، باستخدام الترحيل، تتم إضافة بيانات الاختبار إلى المشروع بحيث أنه عند نشرها على بعض الخوادم، يكون لديها بالفعل بعض القيم التي يمكنك من خلالها اختبار المشروع). بعد اجتياز الاختبارات، يتم إطلاق عمليات الترحيل عند إنشاء المشروع. يتصلون بقاعدة البيانات ويقومون بعمليات الترحيل. إذا تم تنفيذ عمليات الترحيل بالفعل على قاعدة البيانات هذه، فسيقوم مسار الطيران بتخطيها ببساطة (يقوم بتخزين البيانات الخاصة بعمليات الترحيل وحالتها في جدول منفصل في قاعدة البيانات، مما يساعد على إدارتها)، وإذا كانت بعض عمليات الترحيل غير ناجحة، فسيتم تنفيذ المشروع سيتوقف البناء وتثبيته (نشره) على الخادم. حاولت أن أصف ذلك بأكبر قدر ممكن من التفاصيل. إذا كان كل شيء لا يزال غير واضح تماما، فلا يهم: مع الممارسة، سيأتي الفهم.

قم بتشغيل SpringBoot + Flyway

ما هو التمهيد الربيع

ماذا نطلق؟... لفهم ماذا ولماذا نفعل، عليك أن تقرر ما هو SpringBoot. أولاً، دعونا نتحدث بسرعة (حسنًا، بسرعة كبيرة) عن الربيع . في الوقت الحالي، يعد هذا هو المعيار الصناعي الفعلي في تطوير تطبيقات الخادم في Java. معيار ماذا؟ كيف يمكنني أن أشرح لك هذا؟ الربيع هو الهيكل العظمي للتطبيق، والذي نرمي عليه بعد ذلك "اللحم" - منطق أعمالنا. بمساعدة Spring (سأستخدم فيما يلي ورق التتبع هذا حتى لا أضيع الوقت في تبديل اللغات:D)) يمنحنا الربيع بداية نبدأ منها في فعل كل شيء. إنه متعدد الأوجه ومتعدد الوحدات:
  1. هل تريد العمل مع قاعدة بيانات؟ هل تريد العلائقية؟ هل تريد غير العلائقية؟ نحن هنا مع بيانات الربيع.
  2. هل تريد العمل مع طلبات http؟ تفضل، Spring web (Spring MVC).
  3. هل تحتاج إلى حاوية لجميع الأشياء الخاصة بك في مكان واحد؟ وهنا الربيع الأساسية.
  4. هل تحتاج إلى إعداد الأمان في المشروع بحيث تكون هناك أدوار وتسلسل قيادي مختلف؟ أمن الربيع.
  5. فقط عندما كنت تعتقد أنه سيكون من الجميل أن يكون لديك شيء من هذا القبيل، اتضح أن الربيع لديه بالفعل ما تحتاجه، ويتكامل بسرعة وسهولة.
لذلك، يمكننا أن نقول أن هذا ليس مجرد إطار عمل (مثل هذه المكتبة الضخمة)، ولكنه نظام بيئي كامل يتطور بوتيرة مذهلة. لفهم ما هو Spring Core، أي القاعدة التي تتصل بها الوحدات النمطية، أنصحك بمشاهدة عرض توضيحي مباشر حول إنشاء إطار العمل الخاص بك. يستضيفه إيفجيني بوريسوف، وهو رجل رائع جدًا في مجال جافا والربيع. افعل كل ما فعله، وسيصبح عمل الربيع أكثر وضوحًا بالنسبة لك. SpringBoot بدوره هو قمة كل ما لديهم. سحر الماء النقي . الحد الأدنى من الإعدادات لبدء التشغيل الأول للتطبيق. وبطبيعة الحال، هذا لن يعطيك فهما لكيفية استخدامه وماذا تفعل. ولكن قبل التسرع في أعماق التطوير، عليك أن تنظر إلى كل شيء من وجهة نظر عين الطائر.

إطلاق SpringBoot

نظرًا لأننا فهمنا بالفعل ما هو Maven، فلنقم بإنشاء مشروع جديد يلبي احتياجاتنا. للقيام بذلك، ما عليك سوى الانتقال إلى موقع ويب تم إنشاؤه خصيصًا لهذا الأمر. يطلق عليه اسم Spring Initializr . "مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 2هنا تحتاج إلى ملء واختيار ما تحتاجه:
  1. أداة بناء المشروع هي Gradle أو Maven. كما ترون، لم يعد يتم ذكر النملة. يعد هذا تلميحًا جيدًا حول أدوات البناء التي تستحق وقتك.
  2. اللغة التي يمكنك الكتابة بها هي Java، Kotlin، Groovy. كل شيء بسيط هنا: جميعها تشبه JVM ويمكنها تشغيل كود Java بسهولة. بالمناسبة، الأمر يستحق النظر إلى Kotlin. لقد أصبح Groovy بصراحة غير مثير للاهتمام (كان هناك وقت تحولوا فيه إلى الأخاديد، لكنه مر بسرعة).
  3. إصدار الربيع... هنا عليك أن تفهم أن إصدارات الجزء الرئيسي من 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
  7. الوصف: يوضح المشروع التكامل بين SpringBoot وFlyway . (نعم، القدرة على كتابة التوثيق جزء مهم من التطوير :))
  8. اسم الحزمة: com.github.javarushcommunity.springbootflywaydemo . هنا سيقومون على الفور بإنشاء حزمة أساسية لنا مع فصل دراسي سيطلق تطبيقنا.
  9. التعبئة والتغليف: جرة
  10. جافا: 8. دعونا لا نتقدم على القاطرة ونأخذ الثمانية القديمة. لماذا لا 11؟ لأي غرض؟ بالنسبة لمثالنا، لا أرى الهدف.
"مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 3الآن دعونا نضيف الوحدات. نحن بحاجة إلى إيجاد التكامل مع Flyway. يمكنك أيضًا إضافة شيء متعلق بـ MySQL وSpring Data. دعنا نضيف لومبوك آخر (هذا شيء ضروري جدًا، فقط ثق بي الآن:D)) للقيام بذلك، انقر فوق " إضافة تبعيات" ... وحدد كل ما تحتاجه: "مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 4هذه هي الطريقة التي نضيف بها مسار الطيران. "مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 5لومبوك... وهكذا. نتيجة لذلك، نحصل على: "مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 6هاه... لقد ملأنا كل شيء)) الآن انقر فوق إنشاء... وكل شيء - الأرشيف مع المشروع الذي تم إنشاؤه جاهز :) هناك أيضًا شيء رائع مثل مشاركة... , والذي يمنحك رابطًا للصفحة التي ملأتها للتو. وهذا يعني أن هذا هو ما قمت بإنشائه . وحتى إذا حدث خطأ ما، يمكنك دائمًا التحقق باستخدام الرابط. بعد ذلك، نحتاج إلى ربط المشروع الذي تم إنشاؤه بمستودع Git، لذلك نقوم باستنساخ مشروع Springboot-flyway-demo الذي تم إنشاؤه وتنزيله عبر IDEA. للقيام بذلك، تحتاج إلى فتح الفكرة وتحديد File -> New -> Project from Existing Sources... : "مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 7الآن أضف عنوان URL وانقر فوق Clone . الخطوة التالية هي نقل الأجزاء الداخلية للمشروع الذي تم إنشاؤه داخل المشروع الذي قمنا باستنساخه. مشوش؟ سأظهر لك الآن. لقد قمت بفك ضغطه وتلقيت مجموعة الملفات التالية: "مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 8يجب نقلها إلى المشروع المستنسخ. كما في المقالة السابقة، دعونا نضيف pom.xml كمشروع مخضرم: "مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 9الآن نحن مهتمون بالنظر إلى ما تم إنشاؤه لنا. إذا قمت بفتح جميع المجلدات في src وأكثر، فسترى التسلسل الهرمي المعتاد في مشاريع Maven، والذي ناقشناه في المقالة السابقة . لمن لم يقرأها فليقرأها! "مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 10يمكن ملاحظة أن لدينا فئة تطبيق، وسيتم تشغيل تطبيق SpringBoot الخاص بنا باستخدامها. بفضل البرنامج المساعد Maven لـ SpringBoot، لدينا الآن المهمة التي نحتاجها لـ Maven، وهي Spring-boot:run. أين يمكن أن نجد هذه المعلومات؟ على اليمين، فتح لوحة Maven ومشروعنا: "مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 11سيكون هناك خطأ، ولن نتمكن من قراءته، سنرى شيئًا كهذا: "مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 12للحصول على مزيد من المعلومات، وللسرعة يمكننا تشغيل الطريقة الرئيسية لفئة التطبيق: "مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 13وبعد ذلك سنرى السبب الحقيقي: "مشروع جافا من الألف إلى الياء": 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
نقوم بتشغيل الطريقة الرئيسية مرة أخرى ونحصل على: "مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 15الآن نحتاج إلى إضافة عملية ترحيل واحدة على الأقل. لإنشاء عملية ترحيل بشكل صحيح، يجب عليك أخذ القالب التالي: V<VERSION>__<NAME>.sql باستخدام هذا القالب، سنقوم بإنشاء ملف ترحيل باسم V00001__Create_country_table.sql في المجلد المناسب: /src/main/resources/ db.migration/ . لنقم بإنشاء جدول بلد فيه. لنأخذ النص من المقالة الثانية حول قاعدة البيانات . "مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 16قبل البدء، دعنا ندخل وننشئ قاعدة بيانات للعمل: flyway_demo_db. دعونا نفعل ذلك من خلال MysqlWorkbench: "مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 17الآن يمكننا تشغيل الطريقة الرئيسية مرة أخرى: "مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 18كل شيء سار على ما يرام، ولكن بما أنه ليس لدينا أي شيء في المشروع بعد، فقد انتهى العمل. ومع ذلك، فمن الواضح من السجلات ( اقرأ ما هي السجلات ) ما يلي:
  1. تم الاتصال بقاعدة البيانات بنجاح.
  2. تم التحقق من صحة الهجرة وكل شيء على ما يرام.
  3. قامت Flyway بإنشاء جدول لإدارة عمليات الترحيل.
  4. وما بدأته الهجرة 00001 - كان إنشاء البلاد ناجحًا.
للتحقق من ذلك، يمكنك الذهاب ورؤية ما يجري في قاعدة البيانات. لذلك دعونا نذهب إلى خادم MySQL الخاص بنا ونرى ما يحدث مع الجداول الموجودة في قاعدة بيانات flyway_demo_db: $ USE flyway_demo_db; $إظهار الجداول؛ "مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 19كما توقعت، حدثت عملية ترحيل، تم خلالها إنشاء جدول الدولة وظهر جدول flyway_schema_history الذي يخزن معلومات عن عمليات الترحيل. دعنا نذهب أبعد من ذلك ونرى ما هي السجلات الموجودة (وما إذا كان هناك أي سجلات على الإطلاق). $SELECT * FROM flyway_schema_history; "مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 20هنا التسجيل، الوحيد. أنه يحتوي على الكثير من البيانات المثيرة للاهتمام. الإصدار، وصف الترحيل، ونوع SQL (وربما XML أيضًا)، واسم البرنامج النصي نفسه، والمجموع الاختباري ( هذا يشبه رمز التجزئة، والذي يُستخدم للتحقق مما إذا كان الترحيل قد تغير أم لا. ويتم ذلك في حالة قيامنا بإجراء ترحيل في قاعدة البيانات ثم تم تصحيحه: لا يمكن القيام بذلك، يتم إجراء جميع التغييرات فقط من خلال ترحيل جديد ولمنع حدوث ذلك، فإن مبلغ التحقق يراقب هذا ()، اسم المستخدم SQL، معالجة الترحيل التاريخ ووقت التنفيذ والنتيجة (ناجح أو غير ناجح). لا ينبغي تغيير الترحيل المكتوب مرة واحدة في المستقبل. حتى لو كان هناك خلل فيه. جميع التغييرات تتم فقط من خلال الهجرة الجديدة. انها مهمة جدا. لإظهار ما سيحدث، دعونا نغير البرنامج النصي الخاص بنا قليلاً ونحاول تشغيله مرة أخرى. دعونا نضيف إدخالاً واحدًا إلى جدول الدولة في عملية الترحيل لدينا: "مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 21ونقوم بتشغيل الطريقة الرئيسية وهذا ما حصلنا عليه: "مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 22كما توقعت، أدرك مسار الطيران أن البرنامج النصي قد تم تغييره ولم يقم بإجراء الترحيل. في بعض الحالات، قد يكون من الضروري بالفعل تشغيل عملية ترحيل محدثة، ولكي يتمكن مسار الطيران من تخطي ذلك، يتعين عليك حذف الإدخال الموجود في جدول flyway_schema_history ثم تشغيل عملية الترحيل المحدثة. هذا ليس سلوكًا طبيعيًا ولا ينبغي أن يكون كذلك، ولكن عليك أيضًا التعرف على هذه الطريقة لحل المشكلة. لقد تعاملنا مع الهجرة الأولى. الآن أود إضافة ترحيل آخر، ببيانات حول البلدان، كما كان في المقالة حول قاعدة البيانات: file V00002__Add_test_data_to_country.sql"مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 23 ودعنا نشغل الطريقة الرئيسية مرة أخرى: "مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 24من السجلات يتضح أنه قبل بدء الترحيل، كانت قاعدة البيانات في الإصدار 00001، لذلك كل عمليات الترحيل بعد هذا الإصدار. بعد ذلك، تم إطلاق الإصدار 00002 وكان ناجحًا. دعونا نتحقق، أم أنك تصدقني بالفعل أن ثلاثة سجلات في البلد ستكون موجودة بالفعل في قاعدة البيانات؟)) سأتحقق، لذا إثبات: "مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 25شيء من هذا القبيل. إذا قمت بتشغيل المشروع مرة أخرى، فسوف يتخطى flyway ببساطة طرح عمليات الترحيل، نظرًا لأن قاعدة البيانات تتوافق تمامًا مع الإصدار المطلوب.

خاتمة

تعلمنا هذه المرة كيفية فهم واستخدام أداة ترحيل قاعدة البيانات بالتزامن مع SpringBoot. هذه المعلومات ضرورية لفهم ما هي أداة التحكم في إصدار قاعدة البيانات، باستخدام Flyway كمثال. أيها الأصدقاء، الكود المصدري للمشروع الذي عرضته منشور في مؤسستنا على جيثب . إذا أعجبك المثال، قم بتمييزه بنجمة ، وسوف أفهم أن عملي مفيد ويستحق الاستمرار حقًا. تقليديًا، أقترح الاشتراك في حسابي على Github . ومن خلاله أقوم بتنفيذ كل أعمالي على مصادر مفتوحة وكل تلك المشاريع التجريبية التي تصاحب مقالاتي دائمًا. شكرا للجميع على القراءة. في المرة القادمة سوف نكتب طلبنا. ستكون هناك بعض النظريات الضرورية حول Docker في المستقبل، لكننا سنخففها بشدة بالممارسة.

روابط مفيدة

اليوم ليس هناك الكثير من الروابط المفيدة. انتبه إلى فيديو Evgeniy، فهو يستحق المشاهدة حقًا!
  1. موقع لإنشاء مشاريع في الربيع
  2. يفغيني بوريسوف - باني الربيع
  3. التوثيق في الربيع لFlyway

توجد قائمة بجميع المواد الموجودة في السلسلة في بداية هذه المقالة.

تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION