Spring Boot DevTools Guide | راهنمای DevTools در اسپرینگ بوت
توضیحات جلسه
جزوه و مستندات
مفاهیم کلیدی
- Spring Boot DevTools
مجموعهای از ابزارهای ارائه شده توسط Spring Boot برای ارتقای تجربه توسعهدهندگان که باعث افزایش بهرهوری و سرعتبخشی به چرخهی توسعه اپلیکیشن میشود.
- Automatic Restart
مکانیزم راهاندازی مجدد خودکار ApplicationContext در Spring Boot DevTools به محض تغییر کدهای جاوا یا فایلهای properties بدون نیاز به ریستارت دستی برنامه.
- Class Loaders Separation
روش ساختاری DevTools برای افزایش سرعت ریستارت که از دو ClassLoader مجزا در JVM استفاده میکند؛ یکی برای dependencyها (که ثابت هستند) و دیگری برای کدهای پروژه (که مرتب تغییر میکنند).
- Template Cache Disabling
قابلیتی در DevTools که غیرفعالسازی خودکار کشِ موتورهای قالبسازی (مانند Thymeleaf) را در محیط توسعه انجام میدهد تا تغییرات صفحات وب بلافاصله بدون ریستارت اعمال شوند.
- LiveReload Server
یک سرور داخلی مجتمع با DevTools که با تغییر فایلهای استاتیک، اسکریپتها یا قالبها، سیگنال تازه ساختن صفحه را به مرورگر ارسال میکند.
- H2 Console Integration
قابلیت فعالسازی خودکار کنسول تحت وب پایگاهداده H2 در آدرس http://localhost:8080/h2-console در صورت وجود دیتابیس H2 در پروژه.
موارد مصاحبه ای
- مکانیزم Automatic Restart در DevTools چگونه کار میکند و چرا از ریستارت عادی بسیار سریعتر است؟
در این مکانیزم از دو ClassLoader مجزا در JVM استفاده میشود؛ ClassLoader اول تمام کتابخانههای وابسته را بارگذاری کرده و ثابت میماند، و ClassLoader دوم کدهای پروژه را بارگذاری میکند. هنگام تغییر کد، فقط ClassLoader دوم دور ریخته شده و بازسازی میشود.
- آیا تغییر در فایل
pom.xmlتوسط مکانیزم Automatic Restart پوشش داده میشود؟
خیر؛ چون dependencyها در ClassLoader پایه بارگذاری میشوند، تغییرات در pom.xml یا افزودن وابستگی جدید نیاز به ریستارت کامل (Hard Restart) اپلیکیشن دارد.
- رفتار DevTools در محیط پروداکشن (Production) چگونه است؟
این ابزار بهگونهای هوشمند طراحی شده است که اگر پروژه به صورت فایل jar یا war برای محیط پروداکشن بستهبندی شود، خودبهخود تمام ویژگیهای خود را غیرفعال میکند.
- نقش
<optional>true</optional>در تعریف وابستگی DevTools چیست؟
این ویژگی باعث میشود وابستگی DevTools به ماژولها یا پروژههای دیگری که به این پروژه وابسته هستند منتقل نشود و فقط در پروژه فعلی باقی بماند.
- برای استفاده از قابلیت LiveReload چه مواردی نیاز است؟
علاوه بر فعال بودن سرور LiveReload در اپلیکیشن، نصب افزونه LiveReload Extension روی مرورگر نیز الزامی است تا پیامهای ریفرش سرور را دریافت کند.
سناریو کاربردی
- تنظیم و فعالسازی کامل Spring Boot DevTools در محیط IntelliJ IDEA
برای استفاده از تمامی قابلیتهای DevTools شامل ریستارت خودکار و اعمال تغییرات در هنگام اجرا، مراحل زیر در محیط توسعه پیادهسازی میشوند:
۱. افزودن وابستگی به فایل pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
۲. تنظیم کامپایل خودکار IDE:
مراجعه به مسیر File -> Settings -> Build, Execution, Deployment -> Compiler و تیک زدن گزینه Build project automatically.
۳. فعالسازی Auto-make در زمان اجرا:
مراجعه به مسیر File -> Settings -> Advanced Settings و تیک زدن گزینه Allow auto-make to start even if developed application is currently running.
۴. بازنشانی IDE:
یکبار ریستارت کامل IntelliJ IDEA برای اعمال کامل تنظیمات.
۵. تنظیمات سفارشی در فایل application.properties (در صورت نیاز):
spring.devtools.restart.enabled=true
spring.devtools.restart.exclude=resources/**,static/**
spring.devtools.livereload.enabled=true
با انجام این مراحل، با هر تغییر در کدهای جاوا یا فایلهای استاتیک، تغییرات بدون دخالت دست به سرعت در اپلیکیشن و مرورگر منعکس خواهند شد.
بیشتر بدانید
- تفاوت DevTools با IDE Plugin
ابزار Spring Boot DevTools یک Plugin اختصاصی برای یک IDE خاص نیست، بلکه یک وابستگی پایهای در فریمورک است که مستقل از نوع محیط توسعه عمل میکند.
- استثنا کردن مسیرها از ریستارت خودکار
با استفاده از مشخصه spring.devtools.restart.exclude میتوان مسیرهای فایلهای استاتیک را مشخص کرد تا تغییر آنها باعث ریستارت ApplicationContext نشود و فقط توسط LiveReload پردازش گردد.
- کاهش مصرف حافظه با scope تعیینشده
تعیین <scope>runtime</scope> برای DevTools تضمین میکند که کدهای این ابزار در زمان کامپایل استفاده نشده و فقط در زمان اجرای محیط توسعه بارگذاری میشوند.
