Flyway لجافا: دليل شامل مع أمثلة عملية

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة عن Flyway: ما هو ولماذا تحتاجه

Flyway هي مكتبة لإدارة إصدارات وهجرات قواعد البيانات (Database Migration Tool). في تطوير البرمجيات الحديثة، خاصة عند العمل الجماعي واستخدام منهجيات CI/CD، تظهر حاجة ملحة لمزامنة هيكل قاعدة البيانات بين المطورين وبيئات الاختبار والإنتاج. يحل Flyway هذه المشكلة من خلال السماح بوصف تغييرات هيكل قاعدة البيانات (إنشاء الجداول، إضافة الأعمدة، الفهارس، المحفزات، إلخ) على شكل نصوص SQL متسلسلة ومرقمة الإصدارات أو فئات Java.

المفهوم الأساسي لـ Flyway بسيط: كل هجرة (Migration) لها رقم إصدار فريد (مثل V1، V2، V3) ويتم تنفيذها مرة واحدة فقط. تتتبع المكتبة أي الهجرات تم تطبيقها بالفعل على قاعدة بيانات معينة باستخدام جدول خاص (افتراضياً flyway_schema_history). وهذا يضمن تكافؤ النتائج (Idempotency) وقابلية إعادة إنتاج حالة قاعدة البيانات.

لماذا تستخدم Flyway؟

  • إصدارات الهيكل: كل تغيير في قاعدة البيانات هو إصدار منفصل يمكن التراجع عنه أو تطبيقه.
  • الأتمتة: التكامل مع Maven، Gradle، Spring Boot وخطوط أنابيب CI/CD.
  • التحكم في التكامل: يتحقق Flyway من المجاميع الاختبارية (Checksums) للهجرات، مما يمنع التغييرات العشوائية في النصوص المنفذة بالفعل.
  • البساطة: لمعظم المهام، يكفي كتابة نص SQL عادي.

تثبيت Flyway لجافا

لا يتم تثبيت Flyway عبر pip أو npm، لأنه مكتبة Java. هناك عدة طرق لإضافتها إلى مشروعك:

1. Maven (pom.xml)

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>9.22.3</version> <!-- الإصدار الحالي وقت الكتابة -->
</dependency>

<!-- مشغل (Driver) لقاعدة بياناتك، مثلاً PostgreSQL -->
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.7.1</version>
</dependency>

2. Gradle (build.gradle)

implementation 'org.flywaydb:flyway-core:9.22.3'
implementation 'org.postgresql:postgresql:42.7.1'

3. إضافة Maven (للتشغيل من سطر الأوامر)

<plugin>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-maven-plugin</artifactId>
    <version>9.22.3</version>
    <configuration>
        <url>jdbc:postgresql://localhost:5432/mydb</url>
        <user>myuser</user>
        <password>mypassword</password>
    </configuration>
</plugin>

4. Spring Boot (إعداد تلقائي)

إذا كنت تستخدم Spring Boot، يكفي إضافة التبعية (Dependency) وضبط الإعدادات في ملف application.properties:

spring.flyway.enabled=true
spring.flyway.locations=classpath:db/migration
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.username=myuser
spring.datasource.password=mypassword

بداية سريعة مع مثال برمجي

لننظر إلى مثال بسيط لاستخدام Flyway في تطبيق Java لإنشاء جدول users.

الخطوة 1: أنشئ هيكل المجلدات للهجرات

افتراضياً، يبحث Flyway عن نصوص SQL في مجلد db/migration داخل classpath (مثلاً src/main/resources/db/migration).

الخطوة 2: أنشئ ملف الهجرة

أنشئ ملفاً باسم V1__Create_users_table.sql في هذا المجلد:

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

توصيات