Spring Boot 4 Microservices & REST APIs · درس

الإعدادات الخارجية وإعادة الكتابة

أعد كتابة الإعدادات عبر البيئة وسطر الأوامر

الدرس 4 من 413 خطوة

الإعدادات الخارجية وإعادة الكتابة درس مجاني في Spring Boot 4 Microservices & REST APIs على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Spring Boot 4 Microservices & REST APIs، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Spring Boot 4 Microservices & REST APIs 4 دروس في المجموع.

بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.

The 12-Factor Idea

A core principle of portable apps is storing configuration in the environment, not in code. The same artifact should run anywhere, with behavior changed only by external config.

Spring Boot embraces this: a single jar reads from many sources and merges them with a well-defined precedence.

Many Sources, One Environment

Boot collects configuration from numerous property sources — files, environment variables, command-line args, and more — into one unified Environment.

  • Each source contributes key/value pairs
  • Higher-priority sources win on conflicts
  • Your code never knows or cares where a value came from

Precedence Order (High to Low)

When the same key appears in several sources, the highest-priority source wins. A simplified, commonly used ordering:

  • Command-line arguments
  • OS environment variables
  • Profile-specific application-{profile} files
  • Base application files
  • Defaults in code / @Value fallbacks

This is why a CLI flag can override anything baked into the jar.

Overriding with Command-Line Args

Pass --key=value after the jar. These have very high precedence and are ideal for one-off overrides or container entrypoints.

java -jar app.jar \
  --server.port=9090 \
  --spring.profiles.active=prod \
  --app.mail.host=smtp.prod.example.com

Overriding with Environment Variables

Environment variables use an UPPER_SNAKE_CASE form of the property name: dots and dashes become underscores. This is the standard way to inject config in containers.

# property: app.mail.host
export APP_MAIL_HOST=smtp.prod.example.com

# property: server.port
export SERVER_PORT=9090

# property: spring.datasource.password
export SPRING_DATASOURCE_PASSWORD=s3cret

Relaxed Binding for Env Vars

Because env var names are constrained, Spring maps them back to canonical property names. APP_MAIL_MAX_RETRIES resolves to app.mail.maxRetries. This lets you set any property from the environment.

Injecting Secrets at Deploy Time

Keep secrets out of the jar; reference them with placeholders and let the platform supply real values via env vars. The committed file holds only a safe default or none.

spring:
  datasource:
    url: ${DB_URL}
    username: ${DB_USER:app}
    password: ${DB_PASSWORD}

External Config Files

Point Boot at config outside the jar with spring.config.location or add extra files with spring.config.additional-location. Operators can drop a file next to the deployment without rebuilding.

java -jar app.jar \
  --spring.config.additional-location=file:/etc/myapp/

Importing Config

Modern Boot supports spring.config.import to pull in extra documents, optional files, or even config server entries, merged with the normal precedence rules.

spring:
  config:
    import:
      - optional:file:/etc/myapp/override.yml
      - configserver:

Random Values

The random property source generates values on demand — handy for test data or ephemeral identifiers, though not for stable secrets.

app:
  instance-id: ${random.uuid}
  jitter-ms: ${random.int(0,500)}

Debugging Where a Value Came From

When a value is not what you expect, inspect the merged Environment. The actuator /env endpoint lists every property source and the winning value, making precedence problems easy to diagnose.

# requires spring-boot-starter-actuator + exposure
GET /actuator/env/server.port

Quick Check

Test your understanding of precedence.

Recap

Externalized config makes one artifact run everywhere.

  • Many sources merge into one Environment by precedence
  • CLI args > env vars > profile files > base files > code defaults
  • Env vars use UPPER_SNAKE_CASE relaxed binding
  • Inject secrets via placeholders at deploy time
  • Use /actuator/env to debug where a value originated
البدء مجانًا

تعلم Java مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
24
الدروس
93

الأسئلة الشائعة

هل درس «الإعدادات الخارجية وإعادة الكتابة» مجاني؟

نعم — نص درس «الإعدادات الخارجية وإعادة الكتابة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Spring Boot 4 Microservices & REST APIs، انتقل إلى CoddyKit PRO. تتضمن دورة Spring Boot 4 Microservices & REST APIs 4 دروس في المجموع.

ماذا ستتعلم في «الإعدادات الخارجية وإعادة الكتابة»؟

أعد كتابة الإعدادات عبر البيئة وسطر الأوامر تتمرن على Spring Boot 4 Microservices & REST APIs مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Spring Boot 4 Microservices & REST APIs؟

لا تُشترط خبرة سابقة. Spring Boot 4 Microservices & REST APIs على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «الإعدادات الخارجية وإعادة الكتابة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Spring Boot 4 Microservices & REST APIs هذا؟

نعم. كل درس في Spring Boot 4 Microservices & REST APIs يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. application.properties وYAML
  2. الملفات التعريفية للبيئات
  3. إعداد آمن نوعيًا باستخدام @ConfigurationProperties
  4. الإعدادات الخارجية وإعادة الكتابة
← العودة إلى Spring Boot 4 Microservices & REST APIs