0Pricing
Java Academy · درس

خصائص التطبيق وملفات التعريف

افصل الإعدادات باستخدام application.properties/yml، وعرّف ملفات التعريف، وحقن القيم باستخدام @Value و@ConfigurationProperties

خصائص التطبيق وملفات التعريف درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.

application.properties مقابل application.yml

يقرأ Spring Boot الإعدادات من src/main/resources/application.properties أو application.yml. يدعم YAML الإعدادات الهرمية من دون تكرار المفاتيح، وكلاهما متكافئ من حيث الميزات.

# application.properties:
server.port=8080
spring.datasource.url=jdbc:postgresql://localhost/mydb
spring.jpa.hibernate.ddl-auto=validate

# Equivalent application.yml:
server:
  port: 8080
spring:
  datasource:
    url: jdbc:postgresql://localhost/mydb
  jpa:
    hibernate:
      ddl-auto: validate

حقن القيم باستخدام @Value

استخدم @Value("${property.key}") لحقن خاصية واحدة. أضف قيمة افتراضية باستخدام ${key:default}. تعبيرات SpEL مدعومة.

@Service
public class PricingService {
    @Value("${pricing.vat-rate:0.20}")
    private double vatRate;
    @Value("${app.name}")
    private String appName;
}

@ConfigurationProperties للربط الآمن نوعيًا

اربطوا مجموعة من الخصائص ذات الصلة بسجل Java أو فئة مشروحة بـ @ConfigurationProperties. وتتوفر التعليمات التوضيحية للتحقق من الصحة.

@ConfigurationProperties(prefix = "app.mail")
public record MailProperties(
    @NotBlank String host,
    @Min(1) @Max(65535) int port,
    boolean ssl
) {}
// Bind in Spring Boot 3: @EnableConfigurationProperties(MailProperties.class)

ملفات التعريف: تحديد البيئات

تتيح لكم ملفات التعريف امتلاك إعدادات خاصة بكل بيئة. ويمكنكم تعريف كائنات Bean أو خصائص لا تكون نشطة إلا عند تفعيل ملف تعريف معين.

# application-dev.properties (active when profile=dev):
spring.datasource.url=jdbc:h2:mem:testdb
logging.level.com.example=DEBUG

# application-prod.properties (active when profile=prod):
spring.datasource.url=jdbc:postgresql://prod-db/app
logging.level.com.example=WARN

تفعيل ملفات التعريف

فعّلوا ملف تعريف عبر application.properties أو متغير بيئة أو خاصية للنظام أو SPRING_PROFILES_ACTIVE الخاصة بـ Spring Boot.

# application.properties:
spring.profiles.active=dev
# Or environment variable:
export SPRING_PROFILES_ACTIVE=prod
# Or JVM argument:
java -Dspring.profiles.active=prod -jar app.jar

@Profile على كائنات Bean

أضيفوا @Profile("prod") إلى @Bean أو @Component لتسجيله فقط عند تفعيل ملف التعريف المطابق.

@Configuration
public class DataSourceConfig {
    @Bean @Profile("dev")
    public DataSource h2DataSource() { return new EmbeddedDatabaseBuilder().build(); }
    @Bean @Profile("prod")
    public DataSource postgresDataSource() { return DataSourceBuilder.create().url(prodUrl).build(); }
}

مجموعات ملفات التعريف (Spring Boot 2.4+)

اجمعوا عدة ملفات تعريف تحت اسم واحد. يؤدي تفعيل المجموعة إلى تفعيل جميع ملفات التعريف المدرجة فيها في الوقت نفسه.

# application.properties:
spring.profiles.group.production=prod,metrics,cloud

الإعدادات الخارجية باستخدام متغيرات البيئة

يعمل Spring Boot على تعيين متغيرات البيئة تلقائيًا إلى خصائص. يُعيَّن DB_HOST إلى db.host (ربط مرن). وهذا مثالي لعمليات النشر باستخدام Docker وKubernetes.

# application.properties:
spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASS}

أولوية تجاوز الخصائص

تُطبَّق الخصائص حسب ترتيب الأولوية: وسائط سطر الأوامر > متغيرات البيئة > الملفات الخاصة بملف التعريف > application.properties > القيم الافتراضية. تتجاوز المصادر ذات الأولوية الأعلى المصادر ذات الأولوية الأقل.

تشفير الخصائص الحساسة باستخدام Jasypt

يمكن تشفير القيم الحساسة مثل كلمات المرور باستخدام Jasypt Spring Boot. خزّن القيمة المشفّرة في الخصائص؛ ويفك Jasypt تشفيرها عند بدء التشغيل باستخدام مفتاح رئيسي يُمرَّر كوسيط لـJVM.

# application.properties:
spring.datasource.password=ENC(k9r/2dfhXPQz+2jR8yzUYw==)
# JVM arg:
java -Djasypt.encryptor.password=masterSecret -jar app.jar

ملفات YAML متعددة المستندات

تدعم ملفات YAML مستندات متعددة تفصل بينها ---. استخدم spring.config.activate.on-profile داخل كل مستند لإعداد تهيئة مضمّنة خاصة بملف التعريف.

server:
  port: 8080
---
spring:
  config:
    activate:
      on-profile: prod
server:
  port: 443

فحص سريع

ما التعليق التوضيحي الذي يربط مجموعة من الخصائص ذات الصلة بفئة Java مع ضمان سلامة الأنواع؟

مراجعة

استخدم application.properties / application.yml للتهيئة. استخدم @Value للقيم المفردة، و@ConfigurationProperties للمجموعات. تفصل ملفات التعريف بين البيئات. تتجاوز متغيرات البيئة الخصائص — وهذا أساسي للحاويات.

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

هل درس «خصائص التطبيق وملفات التعريف» مجاني؟

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

ماذا ستتعلم في «خصائص التطبيق وملفات التعريف»؟

افصل الإعدادات باستخدام application.properties/yml، وعرّف ملفات التعريف، وحقن القيم باستخدام @Value و@ConfigurationProperties تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟

لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «خصائص التطبيق وملفات التعريف»؟

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

هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟

نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

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

  1. التهيئة التلقائية وSpring Boot Starters
  2. خصائص التطبيق وملفات التعريف
  3. توصيل الـ beans: ‏@Component و@Service و@Repository
  4. الحقن عبر المُنشئ والتبعيات الدائرية
← العودة إلى Java Academy