مقال من سلسلة حول إنشاء مشروع Java (توجد روابط لمواد أخرى في النهاية). هدفه هو تحليل التقنيات الرئيسية، والنتيجة هي كتابة روبوت برقية. في هذا الجزء، نحاول إطلاق SpringBoot وFlyway. الحد الأدنى من النظرية، كما تريد))) نحذف المقارنة النهائية لـ Flyway/Liquibase لفترة زمنية غير محددة ونصل إلى صلب الموضوع. وحتى مع ذلك فقد استمرت بالفعل. لكي لا أصف Flyway مرتين، قررت إضافته على الفور إلى مشروع JRTB المستقبلي.
متعدد الأوجه ومتعدد الوحدات:
هنا تحتاج إلى ملء واختيار ما تحتاجه:
الآن دعونا نضيف الوحدات. نحن بحاجة إلى إيجاد التكامل مع Flyway. يمكنك أيضًا إضافة شيء متعلق بـ MySQL وSpring Data. دعنا نضيف لومبوك آخر (هذا شيء ضروري جدًا، فقط ثق بي الآن:D)) للقيام بذلك، انقر فوق " إضافة تبعيات" ... وحدد كل ما تحتاجه:
هذه هي الطريقة التي نضيف بها مسار الطيران.
لومبوك... وهكذا. نتيجة لذلك، نحصل على:
هاه... لقد ملأنا كل شيء)) الآن انقر فوق إنشاء... وكل شيء - الأرشيف مع المشروع الذي تم إنشاؤه جاهز :) هناك أيضًا شيء رائع مثل مشاركة... , والذي يمنحك رابطًا للصفحة التي ملأتها للتو. وهذا يعني أن هذا هو ما قمت بإنشائه . وحتى إذا حدث خطأ ما، يمكنك دائمًا التحقق باستخدام الرابط. بعد ذلك، نحتاج إلى ربط المشروع الذي تم إنشاؤه بمستودع Git، لذلك نقوم باستنساخ مشروع Springboot-flyway-demo الذي تم إنشاؤه وتنزيله عبر IDEA. للقيام بذلك، تحتاج إلى فتح الفكرة وتحديد File -> New -> Project from Existing Sources... :
الآن أضف عنوان URL وانقر فوق Clone . الخطوة التالية هي نقل الأجزاء الداخلية للمشروع الذي تم إنشاؤه داخل المشروع الذي قمنا باستنساخه. مشوش؟ سأظهر لك الآن. لقد قمت بفك ضغطه وتلقيت مجموعة الملفات التالية:
يجب نقلها إلى المشروع المستنسخ. كما في المقالة السابقة، دعونا نضيف pom.xml كمشروع مخضرم:
الآن نحن مهتمون بالنظر إلى ما تم إنشاؤه لنا. إذا قمت بفتح جميع المجلدات في src وأكثر، فسترى التسلسل الهرمي المعتاد في مشاريع Maven، والذي ناقشناه في المقالة السابقة . لمن لم يقرأها فليقرأها!
يمكن ملاحظة أن لدينا فئة تطبيق، وسيتم تشغيل تطبيق SpringBoot الخاص بنا باستخدامها. بفضل البرنامج المساعد Maven لـ SpringBoot، لدينا الآن المهمة التي نحتاجها لـ Maven، وهي Spring-boot:run. أين يمكن أن نجد هذه المعلومات؟ على اليمين، فتح لوحة Maven ومشروعنا:
سيكون هناك خطأ، ولن نتمكن من قراءته، سنرى شيئًا كهذا:
للحصول على مزيد من المعلومات، وللسرعة يمكننا تشغيل الطريقة الرئيسية لفئة التطبيق:
وبعد ذلك سنرى السبب الحقيقي:
هنا بالفعل يوجد المزيد من المعلومات ويمكنك فعل شيء بها. ما هو الخطأ؟ لدينا تبعيات مرتبطة بقاعدة البيانات، وبالتالي نحتاج إلى توفير إعدادات للاتصال بها. للقيام بذلك، بحثنا في Google ووجدنا أننا بحاجة إلى إضافة التكوينات التالية إلى application.properties:
الآن نحتاج إلى إضافة عملية ترحيل واحدة على الأقل. لإنشاء عملية ترحيل بشكل صحيح، يجب عليك أخذ القالب التالي: V<VERSION>__<NAME>.sql باستخدام هذا القالب، سنقوم بإنشاء ملف ترحيل باسم V00001__Create_country_table.sql في المجلد المناسب: /src/main/resources/ db.migration/ . لنقم بإنشاء جدول بلد فيه. لنأخذ النص من المقالة الثانية حول قاعدة البيانات .
قبل البدء، دعنا ندخل وننشئ قاعدة بيانات للعمل: flyway_demo_db. دعونا نفعل ذلك من خلال MysqlWorkbench:
الآن يمكننا تشغيل الطريقة الرئيسية مرة أخرى:
كل شيء سار على ما يرام، ولكن بما أنه ليس لدينا أي شيء في المشروع بعد، فقد انتهى العمل. ومع ذلك، فمن الواضح من السجلات ( اقرأ ما هي السجلات ) ما يلي:
كما توقعت، حدثت عملية ترحيل، تم خلالها إنشاء جدول الدولة وظهر جدول flyway_schema_history الذي يخزن معلومات عن عمليات الترحيل. دعنا نذهب أبعد من ذلك ونرى ما هي السجلات الموجودة (وما إذا كان هناك أي سجلات على الإطلاق). $SELECT * FROM flyway_schema_history;
هنا التسجيل، الوحيد. أنه يحتوي على الكثير من البيانات المثيرة للاهتمام. الإصدار، وصف الترحيل، ونوع SQL (وربما XML أيضًا)، واسم البرنامج النصي نفسه، والمجموع الاختباري ( هذا يشبه رمز التجزئة، والذي يُستخدم للتحقق مما إذا كان الترحيل قد تغير أم لا. ويتم ذلك في حالة قيامنا بإجراء ترحيل في قاعدة البيانات ثم تم تصحيحه: لا يمكن القيام بذلك، يتم إجراء جميع التغييرات فقط من خلال ترحيل جديد ولمنع حدوث ذلك، فإن مبلغ التحقق يراقب هذا ()، اسم المستخدم SQL، معالجة الترحيل التاريخ ووقت التنفيذ والنتيجة (ناجح أو غير ناجح). لا ينبغي تغيير الترحيل المكتوب مرة واحدة في المستقبل. حتى لو كان هناك خلل فيه. جميع التغييرات تتم فقط من خلال الهجرة الجديدة. انها مهمة جدا. لإظهار ما سيحدث، دعونا نغير البرنامج النصي الخاص بنا قليلاً ونحاول تشغيله مرة أخرى. دعونا نضيف إدخالاً واحدًا إلى جدول الدولة في عملية الترحيل لدينا:
ونقوم بتشغيل الطريقة الرئيسية وهذا ما حصلنا عليه:
كما توقعت، أدرك مسار الطيران أن البرنامج النصي قد تم تغييره ولم يقم بإجراء الترحيل. في بعض الحالات، قد يكون من الضروري بالفعل تشغيل عملية ترحيل محدثة، ولكي يتمكن مسار الطيران من تخطي ذلك، يتعين عليك حذف الإدخال الموجود في جدول flyway_schema_history ثم تشغيل عملية الترحيل المحدثة. هذا ليس سلوكًا طبيعيًا ولا ينبغي أن يكون كذلك، ولكن عليك أيضًا التعرف على هذه الطريقة لحل المشكلة. لقد تعاملنا مع الهجرة الأولى. الآن أود إضافة ترحيل آخر، ببيانات حول البلدان، كما كان في المقالة حول قاعدة البيانات: file V00002__Add_test_data_to_country.sql
ودعنا نشغل الطريقة الرئيسية مرة أخرى:
من السجلات يتضح أنه قبل بدء الترحيل، كانت قاعدة البيانات في الإصدار 00001، لذلك كل عمليات الترحيل بعد هذا الإصدار. بعد ذلك، تم إطلاق الإصدار 00002 وكان ناجحًا. دعونا نتحقق، أم أنك تصدقني بالفعل أن ثلاثة سجلات في البلد ستكون موجودة بالفعل في قاعدة البيانات؟)) سأتحقق، لذا إثبات:
شيء من هذا القبيل. إذا قمت بتشغيل المشروع مرة أخرى، فسوف يتخطى flyway ببساطة طرح عمليات الترحيل، نظرًا لأن قاعدة البيانات تتوافق تمامًا مع الإصدار المطلوب.
ماذا علينا أن نفعل كجزء من هذا؟
- قم بتشغيل تطبيق SpringBoot استنادًا إلى Maven.
- أضف Flyway هناك: لحسن الحظ، يتم دمجها بسهولة.
- أضف مخططًا للجداول الموجودة في قاعدة بيانات الأمثلة.
ما هو مسار الطيران
لاستخدام شيء ما، عليك أولاً معرفة ما هو ولماذا. Flyway هي أداة للتحكم في إصدار قاعدة البيانات. الكلمات معروفة جيدًا، ولكن بطريقة ما لم تتم إضافة الفهم، أليس كذلك؟ دعونا نحاول وصف المشكلة التي يحلها مسار الطيران. لنفترض أن لدينا مشروعًا. مثل كل شيء في عالمنا، فهو ليس مثاليًا، لذلك لم يكن من الممكن التخطيط ووضع النسخة النهائية للمشروع. في كل مرة تظهر بعض الفروق الدقيقة غير المحسوبة. يستخدم المشروع قاعدة بيانات في عمله. بالطبع، إذا تغير المشروع، فقد تتغير بنية قاعدة البيانات أيضًا. لنفترض أننا أضفنا حقلاً جديدًا لأحد الكيانات في مشروعنا. كيف افعلها؟- أضف هذا الحقل إلى كياننا، وقم بتحديث كل شيء حتى يعمل منطق الأعمال.
- تحديث قاعدة البيانات. الطريقة الوحيدة الممكنة هي القيام بذلك يدويًا. للقيام بذلك، تحتاج إلى الدخول وتسجيل البرنامج النصي SQL الضروري.
- ولكن إذا كان لدينا أكثر من مكان واحد حيث ننشر مشروعنا، فهل يجب القيام بذلك في كل واحد منهم؟
- وإذا أردنا العودة، كيف يمكننا أن نعرف بالضبط ما هي حالة بنية قاعدة البيانات الآن؟
- كيف سنتأكد من نجاح تغيير قاعدة البيانات؟
- كيف يمكنني الحصول على الفرصة لتتبع جميع تغييرات قاعدة البيانات التي حدثت في المشروع؟
قم بتشغيل SpringBoot + Flyway
ما هو التمهيد الربيع
ماذا نطلق؟... لفهم ماذا ولماذا نفعل، عليك أن تقرر ما هو SpringBoot. أولاً، دعونا نتحدث بسرعة (حسنًا، بسرعة كبيرة) عن الربيع . في الوقت الحالي، يعد هذا هو المعيار الصناعي الفعلي في تطوير تطبيقات الخادم في Java. معيار ماذا؟ كيف يمكنني أن أشرح لك هذا؟ الربيع هو الهيكل العظمي للتطبيق، والذي نرمي عليه بعد ذلك "اللحم" - منطق أعمالنا. بمساعدة Spring (سأستخدم فيما يلي ورق التتبع هذا حتى لا أضيع الوقت في تبديل اللغات:D)) يمنحنا الربيع بداية نبدأ منها في فعل كل شيء. إنه- هل تريد العمل مع قاعدة بيانات؟ هل تريد العلائقية؟ هل تريد غير العلائقية؟ نحن هنا مع بيانات الربيع.
- هل تريد العمل مع طلبات http؟ تفضل، Spring web (Spring MVC).
- هل تحتاج إلى حاوية لجميع الأشياء الخاصة بك في مكان واحد؟ وهنا الربيع الأساسية.
- هل تحتاج إلى إعداد الأمان في المشروع بحيث تكون هناك أدوار وتسلسل قيادي مختلف؟ أمن الربيع.
- فقط عندما كنت تعتقد أنه سيكون من الجميل أن يكون لديك شيء من هذا القبيل، اتضح أن الربيع لديه بالفعل ما تحتاجه، ويتكامل بسرعة وسهولة.
إطلاق SpringBoot
نظرًا لأننا فهمنا بالفعل ما هو Maven، فلنقم بإنشاء مشروع جديد يلبي احتياجاتنا. للقيام بذلك، ما عليك سوى الانتقال إلى موقع ويب تم إنشاؤه خصيصًا لهذا الأمر. يطلق عليه اسم Spring Initializr .!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 2](https://cdn.javarush.com/images/article/6c7e470c-dd6d-4f7f-ac1d-03988f1b02d6/1024.jpeg)
- أداة بناء المشروع هي Gradle أو Maven. كما ترون، لم يعد يتم ذكر النملة. يعد هذا تلميحًا جيدًا حول أدوات البناء التي تستحق وقتك.
- اللغة التي يمكنك الكتابة بها هي Java، Kotlin، Groovy. كل شيء بسيط هنا: جميعها تشبه JVM ويمكنها تشغيل كود Java بسهولة. بالمناسبة، الأمر يستحق النظر إلى Kotlin. لقد أصبح Groovy بصراحة غير مثير للاهتمام (كان هناك وقت تحولوا فيه إلى الأخاديد، لكنه مر بسرعة).
- إصدار الربيع... هنا عليك أن تفهم أن إصدارات الجزء الرئيسي من Spring ووحداته متسقة.
- بيانات المشروع. لقد وصفت بالفعل هذه الأشياء.
- نختار الأرشيف الذي سيتم جمعه - جرة أو حرب.
- حسنا، نسخة جافا المفضلة لدينا. وفي الآونة الأخيرة، كان هناك الكثير من هذه الإصدارات... لقد انتظروا لسنوات، والآن هناك اثنان في السنة.
- Maven - لم يكن من قبيل الصدفة أن تحدثنا معك عن هذا سابقًا.
- جافا هي عزيزتنا :D
- لنأخذ الإصدار 2.2.11. لماذا لا أحدث واحد؟ لأنه كلما كان أحدث، زادت احتمالية وجود بعض الأخطاء فيه. بالنسبة لنا، لا يهم الإصدار، لكن الإصدار الأقدم سيكون أكثر موثوقية. لذلك، نختار 2.2.11.
- المجموعة: com.github.javarushcommunity
- القطعة الأثرية: Springboot-flyway-demo
- الاسم: عرض SpringBoot + Flyway
- الوصف: يوضح المشروع التكامل بين SpringBoot وFlyway . (نعم، القدرة على كتابة التوثيق جزء مهم من التطوير :))
- اسم الحزمة: com.github.javarushcommunity.springbootflywaydemo . هنا سيقومون على الفور بإنشاء حزمة أساسية لنا مع فصل دراسي سيطلق تطبيقنا.
- التعبئة والتغليف: جرة
- جافا: 8. دعونا لا نتقدم على القاطرة ونأخذ الثمانية القديمة. لماذا لا 11؟ لأي غرض؟ بالنسبة لمثالنا، لا أرى الهدف.
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 3](https://cdn.javarush.com/images/article/5246a501-4cd3-4676-b7c1-daa40095db02/800.jpeg)
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 4](https://cdn.javarush.com/images/article/698cd505-dfd6-4f98-82a4-91b30a594ded/1080.jpeg)
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 5](https://cdn.javarush.com/images/article/750b5a4d-6ffd-4884-bc93-f5bb7beaed38/1080.jpeg)
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 6](https://cdn.javarush.com/images/article/c607ca61-d95c-4eb4-9cd7-e60c3419e889/800.jpeg)
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 7](https://cdn.javarush.com/images/article/4d8f6a79-a80e-4511-afb9-a03b4fa6e665/1024.jpeg)
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 8](https://cdn.javarush.com/images/article/ba6a8d83-6598-4351-a088-afd454e11516/800.jpeg)
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 9](https://cdn.javarush.com/images/article/0042e996-a164-4d0c-b5f4-1a7f9d5f0913/512.jpeg)
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 10](https://cdn.javarush.com/images/article/41d9959c-cf9a-4822-89da-f73bc6d8363d/512.jpeg)
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 11](https://cdn.javarush.com/images/article/ae997f33-00de-4c77-92ad-38ce59acc96b/512.jpeg)
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 12](https://cdn.javarush.com/images/article/489e0f24-a8f5-4273-968f-bc50c4030830/1080.jpeg)
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 13](https://cdn.javarush.com/images/article/02a2408a-4eb2-4c2c-8646-d2eb4c18e75c/800.jpeg)
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 14](https://cdn.javarush.com/images/article/39a661fd-61ab-4125-a8b3-67c2b6253ea4/1080.jpeg)
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](https://cdn.javarush.com/images/article/aaaa0ee4-7790-4c60-892c-2d94577adad2/1080.jpeg)
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 16](https://cdn.javarush.com/images/article/800b2f5e-f7dd-49ab-9992-a77d437e3cce/1080.jpeg)
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 17](https://cdn.javarush.com/images/article/035bd6fb-4e11-4cee-9238-0b28da78ebfd/1080.jpeg)
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 18](https://cdn.javarush.com/images/article/0c3f684e-2710-472a-bc02-2ada5b58e7e9/1080.jpeg)
- تم الاتصال بقاعدة البيانات بنجاح.
- تم التحقق من صحة الهجرة وكل شيء على ما يرام.
- قامت Flyway بإنشاء جدول لإدارة عمليات الترحيل.
- وما بدأته الهجرة 00001 - كان إنشاء البلاد ناجحًا.
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 19](https://cdn.javarush.com/images/article/9e9c928a-fddd-4d7d-b6d2-aca9ee36b2d1/1024.jpeg)
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 20](https://cdn.javarush.com/images/article/f2602d4b-22d4-429b-96e3-43f0de11e710/1024.jpeg)
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 21](https://cdn.javarush.com/images/article/89f91cfe-3c9c-4715-8446-3289acb2a0a8/1080.jpeg)
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 22](https://cdn.javarush.com/images/article/564653d5-9145-4d3b-a12c-dca0b6b3e443/1080.jpeg)
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 23](https://cdn.javarush.com/images/article/86cd9ab4-4c11-4bb5-a113-51db21e678a9/1080.jpeg)
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 24](https://cdn.javarush.com/images/article/7f8d8fa6-fd73-4004-b2d7-160d5e7de3dc/1080.jpeg)
!["مشروع جافا من الألف إلى الياء": SpringBoot + Flyway - 25](https://cdn.javarush.com/images/article/6806330f-aa25-46b8-a184-dfed4a7c59eb/256.jpeg)
GO TO FULL VERSION