المنفذ الافتراضي في Spring Boot: 5 طرق للتكوين

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

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

ابدأ الدورة

لماذا لا يريد تطبيق Spring Boot الخاص بك الاستماع على المنفذ 8080؟

\n

تقوم بتشغيل أول تطبيق Spring Boot لك، وترى الشعار المرغوب في وحدة التحكم، وتفتح المتصفح - وتجد "Connection refused". موقف مألوف؟ غالبًا ما تكون المشكلة أن المنفذ 8080 مشغول بالفعل بعملية أخرى (مثل Skype أو Docker أو نسخة أخرى من تطبيقك نفسه). أو على العكس، تحتاج إلى تشغيل ثلاث خدمات مصغرة على جهاز واحد، وجميعها تريد الاستيلاء على نفس المنفذ.

\n

في هذه المقالة، سنستعرض جميع الطرق الرئيسية لتكوين المنفذ في Spring Boot - من الأبسط إلى طرق "الإنتاج" الفعلية. ستتعلم كيفية تجاوز المنفذ من خلال ملفات التكوين، ومتغيرات البيئة، ووسائط سطر الأوامر، وحتى برمجيًا. وفي النهاية، سأقدم لك قائمة مرجعية لاختيار الطريقة المناسبة حسب الموقف.

\n\n

الطريقة 1: application.properties - الطريقة الكلاسيكية

\n

الطريقة الأكثر شيوعًا وبديهية. في الملف src/main/resources/application.properties، يكفي إضافة سطر واحد:

\n
server.port=9090
\n

هذا كل شيء. بعد إعادة التشغيل، سوف يستمع التطبيق على المنفذ 9090. إذا كنت بحاجة إلى العودة إلى 8080، فما عليك سوى حذف السطر أو تعليقه.

\n

المزايا: البساطة، الوضوح، يعمل "مباشرة من الصندوق".

\n

العيوب: مثبت بشكل ثابت في الكود - لكل بيئة (dev، test، prod) ستحتاج إلى تغيير الملف يدويًا أو استخدام الملفات الشخصية (profiles).

\n\n

الطريقة 2: application.yml (YAML) - لعشاق التنظيم

\n

إذا كنت تفضل تنسيق YAML، فسيكون التكوين على النحو التالي:

\n
server:\n  port: 9090
\n

لاحظ المسافات البادئة: مسافتان قبل port. YAML حساس للمسافات، لكنه يسمح بتجميع الإعدادات. على سبيل المثال، يمكنك تعيين كل من المنفذ ومسار السياق معًا:

\n
server:\n  port: 9090\n  servlet:\n    context-path: /myapp
\n

متى تستخدم: إذا كان مشروعك يستخدم بالفعل YAML لجميع التكوينات (على سبيل المثال، لـ Spring Cloud Config).

\n\n

الطريقة 3: وسائط سطر الأوامر - المرونة لـ DevOps

\n

الطريقة الأكثر مرونة، والتي تُستخدم غالبًا في الحاويات و CI/CD. عند تشغيل ملف JAR، ما عليك سوى تمرير المعامل:

\n
java -jar myapp.jar --server.port=9090
\n

أو، إذا كنت تستخدم إضافة Maven/Gradle:

\n
mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=9090
\n

وسائط سطر الأوامر لها أعلى أولوية بين جميع طرق التكوين في Spring Boot. هذا يعني أنها ستتجاوز حتى ما هو مكتوب في application.properties.

\n

مثالي لـ: حاويات Docker، Kubernetes، عمليات النشر الآلي.

\n\n

الطريقة 4: متغيرات البيئة - معيار تطبيقات العوامل الاثني عشر

\n

يقرأ Spring Boot متغيرات البيئة تلقائيًا ويحولها إلى خصائص. القاعدة بسيطة: SERVER_PORT (بأحرف كبيرة، شرطة سفلية بدلاً من النقطة) ستصبح server.port.

\n

في Linux/macOS:

\n
export SERVER_PORT=9090\njava -jar myapp.jar
\n

في Windows (cmd):

\n
set SERVER_PORT=9090\njava -jar myapp.jar
\n

في Docker Compose، يبدو هذا أكثر أناقة:

\n
services:\n  myapp:\n    image: myapp:latest\n    ports:\n      - "9090:9090"\n    environment:\n      - SERVER_PORT=9090
\n

لماذا هذا رائع: متغيرات البيئة لا تدخل إلى المستودع، ويسهل تغييرها لبيئات مختلفة، وتتبع منهجية تطبيق العوامل الاثني عشر (12-factor app).

\n\n

الطريقة 5: التكوين البرمجي - للإدارة الدقيقة

\n

أحيانًا تحتاج إلى حساب المنفذ ديناميكيًا (على سبيل المثال، العثور على منفذ متاح أو الحصول عليه من خدمة خارجية). هنا يأتي دور كود Java.

\n

أبسط خيار هو تجاوز طريقة setServerPort في الكلاس

المدونات

توصيات الكتب