Properties Files in Spring | آموزش فایلهای Properties در اسپرینگ
توضیحات جلسه
جزوه و مستندات
مفاهیم کلیدی
- Spring Framework Legacy Configuration
روش سنتی پیکربندی در اسپرینگ که نیازمند تعریف دستی Beanها از طریق فایلهای XML یا تنظیم صریح PropertySourcesPlaceholderConfigurer برای خواندن فایلهای تنظیمات بود.
- Auto-configuration
قابلیت پیکربندی خودکار در Spring Boot با رویکرد Opinionated Defaults که به صورت پیشفرض و خودکار مسیر src/main/resources را هنگام اجرای برنامه اسکن و لود میکند.
- Pre-Bean Initialization Lifecycle
مرحلهای از چرخه حیات Spring Boot که در آن فایلهای تنظیمات، پیش از ساخت و مقداردهی هرگونه Bean در ApplicationContext لود و پردازش میشوند.
- Spring Environment Object
آبجکتی در هسته فریمورک که مقادیر کانفیگ را پس از پارسشدن در خود نگه میدارد و رفتارهایی مانند پورت سرور، شرایط ساخت Beanها و سطح لاگها را تعیین میکند.
- Classpath Packaging
فرایند بیلد توسط Maven یا Gradle که دایرکتوری src/main/resources را مستقیماً در ریشه Classpath و داخل مسیر BOOT-INF/classes فایل اجرایی JAR قرار میدهد.
- Flat Key-Value Syntax
سینتکس خطی و تخت مورد استفاده در فایل application.properties که برای تفکیک سطوح و ساختار سلسلهمراتبی از علامت نقطه یا همان Dot Notation استفاده میکند.
- Hierarchical YAML Structure
ساختار درختی و خوانا در application.yml که پیشوندهای تکراری در نامگذاری کانفیگها را حذف کرده و روابط والد و فرزندی را با فاصلهگذاری مشخص میکند.
موارد مصاحبه ای
- What is the loading priority between application.properties and application.yml?
فایل application.properties اولویت بالاتری نسبت به application.yml دارد؛ در صورت وجود کلید یکسان در هر دو فایل، مقدار موجود در فایل properties مقدار معادل در yml را رونویسی یا Override میکند.
- Why should application.properties and application.yml not be used together?
استفاده همزمان از هر دو فایل به دلیل تداخل اولویتها، پیچیدگی در عیبیابی و نقض یکپارچگی پیکربندی، توسط مستندات رسمی Spring Boot منع شده است.
- When are configuration files loaded during Spring Boot startup lifecycle?
این فایلها در فاز Pre-Bean Initialization بارگذاری میشوند تا مقادیر پایه محیطی پیش از ساخت و تزریق وابستگیهای Beanها در Environment ثبت شده باشند.
- What causes ScannerException or ParserException when using YAML in Spring Boot?
استفاده از کاراکتر Tab به جای کلید Space برای تورفتگی یا Indentation، ساختار درختی YAML را نامعتبر کرده و خطای پارس در لود برنامه ایجاد میکند.
سناریو کاربردی
در یک سناریوی راهاندازی سرویس، تنظیمات پایهای برنامه به دو شیوه قابل پیادهسازی است:
در فرمت خطی application.properties:
server.port=8085
spring.application.name=taco-cloud
spring.main.banner-mode=off
در فرمت ساختاریافته application.yml:
server:
port: 8085
spring:
application:
name: taco-cloud
main:
banner-mode: off
با اعمال این مقادیر، وبسرور داخلی Tomcat به جای پورت پیشفرض ۸۰۸۰ روی پورت ۸۰۸۵ اجرا میشود، نام اپلیکیشن در لاگهای ابتدایی درج میگردد و بنر اسکی ابتدای اجرای Spring Boot غیرفعال خواهد شد.
بیشتر بدانید
- Indentation Rule
در فایلهای YAML صرفاً باید از کلید Space استفاده شود و استفاده از Tab منجر به توقف فرآیند بوت برنامه خواهد شد.
- Official Reference
لیست جامع و استاندارد تمام مشخصههای قابل تنظیم در Spring Boot در ضمیمه مستندات رسمی تحت عنوان Common Application Properties در دسترس است.
- Modern Architecture Practice
به دلیل ساختار تمیز، حذف پیشوندهای تکراری و خوانایی بسیار بالاتر در پروژههای بزرگ و توزیعشده، استفاده از YAML نسبت به properties استاندارد رایجتری در سطح سازمانها محسوب میشود.
