404 Not Found

404 Not Found


nginx

نظرة عامة على Spring Boot وإعداد بيئة التطوير

يجعل Spring Boot تطوير Java على مستوى المؤسسات سهلاً مثل البناء بالقطع—بفضل ميزاته الثلاث الرئيسية—التهيئة التلقائية، وتبعيات البدء، والحاوية المدمجة—فإنه يُلغي تماماً الحاجة إلى تهيئة XML المرهقة.

1. ما ستتعلمه


2. قصة حقيقية لمطوّر خلفية

(1) نقطة الألم: جحيم تهيئة XML

Alice هي مطوّرة خلفية تولت للتو مشروع Spring MVC تقليدي—نظام إدارة الطلبات التجاري OrderFlow. يحتوي المشروع على أكثر من 20 ملف تهيئة XML، حيث تمتد تهيئات مصدر البيانات وحدها عبر 5 ملفات. في كل مرة تضيف ميزة جديدة، يجب أن تتنقل بين ثلاثة ملفات XML، ويستغرق المتعلمون الجدد في المتوسط أسبوعين ليتأقلموا. كما يتطلب النشر تثبيت Tomcat بشكل منفصل وتهيئة مصدر بيانات JNDI، وقد يستغرق استكشاف مشكلة بيئة واحدة نصف يوم.

(2) حل Spring Boot

يستخدم Spring Boot فلسفة "الاصطلاح على التهيئة" لاستبدال تهيئة XML المرهقة بالتشغيل بدون تهيئة:

JAVA
@SpringBootApplication
public class OrderFlowApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderFlowApplication.class, args);
    }
}

(3) العوائد

بعد أن أعادت Alice بناء OrderFlow باستخدام Spring Boot: انخفض عدد ملفات تهيئة XML من 20 إلى 0، وتم تقليص وقت تأقلم الموظفين الجدد من أسبوعين إلى يومين، ويتطلب النشر أمراً واحداً فقط—java -jar—وTomcat المدمج جاهز للاستخدام فوراً.


3. الميزات الأساسية لـ Spring Boot

(1) ثلاث ميزات أساسية

يمكن تلخيص المفاهيم الأساسية لـ Spring Boot بثلاث كلمات مفتاحية: التهيئة التلقائية، وتبعيات البدء، والحاوية المدمجة.

100%
graph LR
    A[Spring Boot] --> B[Auto-Configuration<br/>التهيئة التلقائية]
    A --> C[Starter Dependencies<br/>تبعيات البدء]
    A --> D[Embedded Server<br/>الخادم المدمج]
    B --> B1[Condition-based<br/>تسجيل Bean حسب الشروط]
    C --> C1[Opinionated<br/>إدارة تبعيات رأيوية]
    D --> D1[Tomcat / Jetty<br/>/ Undertow]
الميزة Spring التقليدي Spring Boot
طريقة التهيئة تهيئة XML / Java واسعة تهيئة تلقائية + YAML بسيط
إدارة التبعيات تحديد الإصدارات يدوياً قد يؤدي إلى تعارضات تبعيات بدء مع إدارة إصدارات موحدة
خادم التطبيقات Tomcat مثبت خارجياً Tomcat مدمج، تشغيل مباشر من JAR
هيكل المشروع يتطلب تهيئة مسح المكونات يدوياً @SpringBootApplication تفعيل بنقرة واحدة
طريقة التشغيل نشر WAR على الحاوية java -jar أو mvn spring-boot:run

(2) متطلبات Spring Boot 3.x الجديدة

Spring Boot 3.x هو إصدار رئيسي يتطلب Java 17 كحد أدنى وJakarta EE 9+.

البُعد Spring Boot 2.x Spring Boot 3.x
إصدار Java الأدنى Java 8 Java 17
مساحة الأسماء javax.* jakarta.*
Spring Framework 5.x 6.x
GraalVM Native Image تجريبي مدعوم رسمياً
المراقبة أساسيات Micrometer تكامل عميق لـ Micrometer وOTel
📌 نقطة رئيسية: ترحيل اسم الحزمة javax → jakarta في Spring Boot 3.x هو أكبر تغيير كسر؛ يجب تحديث جميع عبارات الاستيراد.


4. نظرة سريعة على الميزات الجديدة في Java 17 LTS

(1) صنف السجل (Record)

السجل (Record) هو نوع بيانات غير قابل للتغيير يُولّد تلقائياً مُنشئاً، ومُسترجعات (getters)، وequals، وhashCode، وtoString.

(1) ▶ مثال: استخدام Record لتعريف Order DTO

JAVA
public record OrderRequest(
    Long productId,
    Integer quantity,
    String customerEmail
) {}

الناتج:

TEXT
// التنفيذ ناجح

(2) الصنف المختوم (Sealed Class)

الصنف المختوم يقيّد الأصناف التي يمكن أن ترث منه أو تنفذه، مما يعزز أمان الأنواع.

(2) ▶ مثال: تعريف حالة الدفع باستخدام صنف مختوم

JAVA
public sealed interface PaymentStatus
    permits Pending, Completed, Failed {}

public record Pending(String transactionId) implements PaymentStatus {}
public record Completed(String transactionId, LocalDateTime paidAt) implements PaymentStatus {}
public record Failed(String transactionId, String reason) implements PaymentStatus {}

الناتج:

TEXT
// التنفيذ ناجح

(3) كتلة النص (Text Block)

كتلة النص: استخدم علامات اقتباس ثلاثية لكتابة سلاسل متعددة الأسطر ووداعاً لمحارف الهروب.

(3) ▶ مثال: كتابة استعلام SQL باستخدام كتلة نص

JAVA
String query = """
    SELECT o.id, o.total_amount, c.email
    FROM orders o
    JOIN customers c ON o.customer_id = c.id
    WHERE o.status = 'PENDING'
      AND o.created_at < :cutoffTime
    ORDER BY o.created_at DESC
    """;

الناتج:

TEXT
// التنفيذ ناجح
الميزة صياغة Java 11 صياغة Java 17
بيانات غير قابلة للتغيير Lombok برمجية أو كود معياري record بسطر واحد
التحكم في التسلسل الهرمي للأنواع وراثة غير مقيدة sealed أصناف فرعية مقيدة
سلاسل متعددة الأسطر اتصال + \n """ ... """
تعبير Switch عبارة تعبير + معاينة مطابقة الأنماط

5. إنشاء مشروع باستخدام Spring Initializr

(1) مقدمة في Spring Initializr

Spring Initializr هو مولّد المشاريع الرسمي الذي يتيح لك إنشاء هياكل المشاريع بسرعة عبر واجهة ويب أو تكامل IDE.

(1) ▶ مثال: استخدام Spring Initializr مع curl

BASH
curl https://start.spring.io/starter.zip \
  -d type=maven-project \
  -d language=java \
  -d bootVersion=3.2.5 \
  -d groupId=com.orderflow \
  -d artifactId=orderflow-service \
  -d name=orderflow-service \
  -d packageName=com.orderflow \
  -d javaVersion=17 \
  -d dependencies=web,data-jpa,mysql,validation \
  -o orderflow-service.zip

الناتج:

TEXT
{"status":"ok","data":{}}

(2) هيكل المشروع المُولّد

TEXT
orderflow-service/
├── src/
│   ├── main/
│   │   ├── java/com/orderflow/
│   │   │   └── OrderflowServiceApplication.java
│   │   └── resources/
│   │       ├── application.properties
│   │       ├── static/
│   │       └── templates/
│   └── test/
│       └── java/com/orderflow/
│           └── OrderflowServiceApplicationTests.java
├── pom.xml
└── mvnw / mvnw.cmd

(2) ▶ مثال: التبعيات الرئيسية في pom.xml الخاص بـ OrderFlow

XML
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.5</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

الناتج:

TEXT
// التنفيذ ناجح

6. تهيئة بيئة التطوير

(1) اختيار IDE والإضافات

IDE الإضافات الموصى بها المزايا
IntelliJ IDEA Ultimate Spring Boot Plugin / Spring Initializr أفضل دعم لـ Spring، تنفيذ بنقرة واحدة
IntelliJ IDEA Community Spring Boot Assistant (طرف ثالث) مجاني لكن الوظائف محدودة
VS Code Spring Boot Extension Pack خفيف، مثلمطوري الواجهة الأمامية المنتقلين للتطوير الخلفي

(2) قائمة الأدوات الأساسية

الأداة الغرض التحقق من التثبيت
JDK 17+ الترجمة والتشغيل java -version
Maven 3.9+ أداة البناء mvn -version
Git التحكم في الإصدارات git --version
Postman / curl اختبار API إرسال طلب اختبار

(1) ▶ مثال: التحقق من بيئة التطوير

BASH
# التحقق من إصدار Java (يجب أن يكون 17+)
java -version
# openjdk version "17.0.9"

# التحقق من Maven
mvn -version
# Apache Maven 3.9.6

# التحقق من Git
git --version
# git version 2.43.0

الناتج:

TEXT
# تم تنفيذ الأمر بنجاح

7. OrderFlow: خلفية المشروع وخريطة المسار التعليمي

(1) سيناريوهات أعمال OrderFlow

OrderFlow، الذي طورته Alice، هو نظام إدارة طلبات تجاري قائم على الخدمات المصغرة. تشمل وظائفه الأساسية:

الوحدة الوظيفة أبرز التقنيات
إدارة المنتجات CRUD / التخزين المؤقت / البحث JPA + Redis + Caffeine
إدارة الطلبات تقديم الطلبات / إلغاء الطلبات / الإلغاء التلقائي بسبب انتهاء المهلة المعاملات + المهام المجدولة + العمليات غير المتزامنة
مصادقة المستخدمين التسجيل / تسجيل الدخول / صلاحيات الأدوار Spring Security + JWT
العمليات والمراقبة فحوصات الصحة / المقاييس / التتبع Actuator + Prometheus + Grafana

(2) خريطة المسار التعليمي

100%
graph LR
    P1["المرحلة 1<br/>البدء<br/>L01-L06"] --> P2["المرحلة 2<br/>الميزات الأساسية<br/>L07-L12"]
    P2 --> P3["المرحلة 3<br/>الميزات المتقدمة<br/>L13-L18"]
    P3 --> P4["المرحلة 4<br/>الإدارة والعمليات<br/>L19-L23"]
    P4 --> P5["المرحلة 5<br/>التطبيق الشامل<br/>L24-L26"]

8. مثال شامل: إنشاء مشروع OrderFlow والتحقق من البيئة

JAVA
// OrderflowServiceApplication.java
package com.orderflow;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class OrderflowServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderflowServiceApplication.class, args);
    }
}

// controller/HealthController.java
package com.orderflow.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;

@RestController
public class HealthController {

    @GetMapping("/api/health")
    public Map<String, Object> health() {
        return Map.of(
            "status", "UP",
            "service", "OrderFlow",
            "version", "1.0.0"
        );
    }
}
💻 الناتج:

TEXT
$ curl http://localhost:8080/api/health
{"status":"UP","service":"OrderFlow","version":"1.0.0"}

❓ أسئلة شائعة

س ما العلاقة بين Spring Boot وSpring Framework؟
ج Spring Framework هو الإطار الأساسي، بينما Spring Boot هو أداة تسريع تطوير مبنية فوق Spring Framework. يوفر تهيئة تلقائية، وتبعيات بدء، وحاوية مدمجة، مما يتيح لك البدء بسرعة بدون تهيئة يدوية.
س هل Java 17 مطلوب؟ ألا يمكنني استخدام Java 11؟
ج Spring Boot 3.x يتطلب Java 17 أو أحدث؛ وهذا هو الحد الأدنى المطلوب لـ Jakarta EE 9 أو أحدث. إذا كان يجب عليك استخدام Java 8 أو 11، فعليك استخدام Spring Boot 2.x، لكنه وصل إلى نهاية العمر الافتراضي (EOL) ولن يتلقى تحديثات أمنية بعد الآن.
س أيهما أختار، Maven أم Gradle؟
ج كلاهما يعمل. Maven لديه نظام بيئي أكثر نضجاً ووثائق أكثر شمولاً، لذا يستخدم هذا الدرس Maven. Gradle يبني أسرع وهو أكثر ملاءمة للمشاريع الكبيرة متعددة الوحدات.
س هل يمكنني استخدام المشروع المُولّد بواسطة Spring Initializr مباشرة؟
ج يمكنك تشغيله مباشرة؛ فهو يتضمن بالفعل صنف التشغيل الرئيسي وأصناف الاختبار. ومع ذلك، ستحتاج إلى إضافة تبعيات وكود بناءً على متطلبات عملك، مثل كيانات JPA، والمتحكمات، والخدمات، وما إلى ذلك.
س هل يمكن لـ record أن يحل محل جميع POJOs؟
ج record مناسب لأغراض نقل البيانات (DTOs) غير القابلة للتغيير. إذا كنت بحاجة إلى كيان JPA (الذي يتطلب القابلية للتغيير ومُنشئ بدون معاملات)، فيجب عليك استخدام صنف عادي.
س هل إصدار IDEA Community كافٍ؟
ج إصدار Community يفتقر إلى إضافة Spring Boot الرسمية، لكن لا يزال بإمكانك استخدامه بشكل أساسي مع إضافات طرف ثالث. إذا كانت ميزانيتك تسمح، فإن الإصدار Ultimate يقدم دعماً أشمل لـ Spring ويُوصى به.

📖 ملخص


📝 تمارين

  1. تمرين أساسي (الصعوبة ⭐): استخدم Spring Initializr لإنشاء مشروع Spring Boot 3.x يتضمن تبعية spring-boot-starter-web. بعد تشغيل المشروع، قم بزيارة /api/health لإرجاع {"status":"UP"}.

  2. مسألة متقدمة (الصعوبة ⭐⭐): عرّف سجل Product في المشروع يحتوي على الحقول id وname وprice، وأنشئ ProductController يُرجع قائمة منتجات مشفرة بشكل ثابت.

  3. تحدٍ (الصعوبة: ⭐⭐⭐): استخدم sealed interface لتعريف OrderStatus (الذي يتضمن أربع تطبيقات: PENDING، CONFIRMED، SHIPPED، وCANCELLED)، وأرجع رموز حالة HTTP مختلفة في المتحكم بناءً على الحالات المختلفة.

Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%