جلسه شماره 122رایگان

Spring Boot DevTools Guide | راهنمای DevTools در اسپرینگ بوت

00:17:42

توضیحات جلسه

🎥 این ویدیو قسمت صد و دهم از بوت‌کمپ رایگان جاوا و نهمین ویدیو از پلی‌لیست آموزش اسپرینگ است. 📚 در این جلسه وارد یکی از کاربردی‌ترین ابزارهایی می‌شویم که سرعت توسعه شما را به شدت افزایش می‌دهد: Spring Boot DevTools. در دنیای توسعه نرم‌افزار، هر چقدر سریع‌تر بتوانید تغییرات کد خود را مشاهده کنید، بازدهی شما بالاتر می‌رود. Spring Boot DevTools ابزاری است که برای تسهیل فرآیند توسعه (Development) طراحی شده تا نیاز به ری‌استارت‌های دستی و طولانی‌مدت را به حداقل برساند. در این ویدیو از تعریف پایه این ابزار شروع می‌کنیم، ویژگی‌های کلیدی آن را بررسی می‌کنیم و سپس یاد می‌گیریم چگونه آن را در محیط‌های مختلف از جمله IntelliJ IDEA و VS Code به درستی پیکربندی کنیم. در این جلسه یاد می‌گیریم: 🛠️ Spring Boot DevTools چیست و چه کاربردی در سرعت توسعه دارد ✨ بررسی ویژگی‌های اصلی و کلیدی این ابزار ⚙️ نحوه کانفیگ و راه‌اندازی DevTools در پروژه‌های جاوا 💻 تنظیمات و استفاده از DevTools در محیط VS Code 🖥️ تنظیمات تخصصی و استفاده از DevTools در IntelliJ IDEA 🔄 بررسی قابلیت Auto Application Restart و اهمیت آن در توسعه سریع 🚀 نگاهی به سایر قابلیت‌های کاربردی این ابزار برای برنامه‌نویسان 🧠 جمع‌بندی و مرور نکات مهم برای استفاده بهینه در پروژه‌های واقعی اگر می‌خواهید مانند یک حرفه‌ای، محیط توسعه خود را بهینه‌سازی کنید و زمان خود را صرف حل مسائل منطقی کنید تا صرف کردن وقت برای ری‌استارت کردن اپلیکیشن، این ویدیو برای شماست. 📄 لینک دانلود Mindmap جلسه (بر اساس تدریس): https://github.com/farzadafi/Teaching/blob/master/Book/Spring-In-Action-6/01_3_5devtools.pdf 📌 یوتیوب: https://youtube.com/@farzadafi 📌 آپارات: https://aparat.com/farzadafi 📌 وب سایت: https://farzadafi.ir 💬 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi هر سوالی داشته باشید می‌توانید در گروه بپرسید تا من یا مربی‌های گروه کمکتان کنیم 💬 🎯 بوت‌کمپ رایگان جاوا – آموزش کاملاً پروژه‌محور برای یادگیری عمیق جاوا و ورود به بازار کار.

جزوه و مستندات

مفاهیم کلیدی

  • 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 تضمین می‌کند که کدهای این ابزار در زمان کامپایل استفاده نشده و فقط در زمان اجرای محیط توسعه بارگذاری می‌شوند.