مقدمهای بر Spring Boot (جشنواره عید تا عید)
(این مقاله از طرف جناب آقای حمید اسماعیلی سامانی برای جشنواره عید تا عید جاواکاپ ارسال شده است و محتوای این مطلب لزوماً موردتأیید جاواکاپ نیست. لطفاً با مطالعه، بازنشر و امتیازدهی به این مطلب، به انتخاب برترین مقاله در این جشنواره کمک نمایید.)
حدود ۱۴ سال از ارایه اولین نسخهی بتا از فریمورک Spring گذشته است. فریمورک Spring به منظور ایجاد برنامههای سازمانی جاوا با کاهش پیچیدگیهای موجود در نسخههای J2EE آن دوره ایجاد شده است.
چارچوب Spring یک چارچوب متن باز است که در این حیطه به خوبی از آن اسقبال شده است. Spring به عنوان یکی از کاملترین فریمورکها جهت توسعهی برنامههای سازمانی در زبان جاوا با ویژگیهایی از جمله قابلیت اعتماد، سرعت بالا و با بهکارگیری الگوهایطراحی ایجاد شده است. Spring جزء اولین چارچوبهایی است که مفاهیمی مانند تزریق وابستگی (Dependency Injection) و وارونگی کنترل (Inversion of Control) در آن پیادهسازی شده است. فریمورک Spring تاکنون جوایز زیادی در انجمنهای متنباز کسب کرده است و سعی بر آن داشته با تکنولوژیهای مرتبط به صورت همزمان پیش رود.
به صورت کلی هدف از توسعهی این چارچوب زمینهسازی زیرساخت برای توسعهی نرمافزار به نحوی بوده که در آن استفادهکنندگان از این چارچوب صرفا تمرکز خود را بر روی منطق دامنهی کاری خود گذاشته و فراهمسازی زیرساخت و یکپارچهسازی آن به سادگی قابل انجام باشد. در حال حاضر امکان ارتباط با پایگاههای داده SQL و NoSQL با سطح بالایی از انتزاع توسط پروژههای مستقل بر پایهی Spring ایجاد شده است ( پروژههای Spring Data ) و برنامهنویسان تمامی جوانب برنامهی خود را با کمک SPI و API هایی که Spring در اختیار آنها قرار میدهد پیادهسازی میکنند.
یکی از پروژههایی که از حدود سه سال گذشته بر پایهی Spring ایجاد شده است پروژهی Spring Boot است. بر خلاف سایر پروژههای بر پایهی Spring که به منظور ایجاد یکپارچهسازی و یا تسهیل در بکارگیری تکنولوژی خاصی ایجاد شده است این پروژه به منظور تسهیل امادهسازی و بکارگیری مولفههای مختلف فریمورک Spring ایجاد شده است. با کمک این چارچوب روش ایجاد یک پروژه با چارچوب Spring نسبت به گذشته بسیار ساده و کاملتر شده است. امکاناتی که این پروژه برای برنامهنویسان ایجاد کرده موجب افزایش سرعت برنامهنویسی و کاهش پیچیدگی و سادگی برنامهها شده است.
یکی از ویژگیهای Spring Boot ویژگی خود رای بودن آن در نحوهی پیکربندی زیرساخت Spring است. این ویژگی با دنبال کردن بهترین روشهای برنامهنویسی سبب ایجاد بستری تنومند، توسعهپذیر و مقیاسپذیر شده است.
پروژهی Spring Boot از ادرس https://projects.spring.io/spring-boot قابل دسترسی است و مستندات جامع آن از طریق آدرس http://docs.spring.io/spring-boot/docs/1.5.2.RELEASE/reference/htmlsingle قابل دریافت است.
جهت درک بهتر از چگونگی عملکرد Spring Boot مقایسهای بین پیادهسازی یک برنامهی وب با فریمورک Spring بدون استفاده از Spring Boot و با استفاده از آن را خواهیم داشت.
جهت پیکربندی اولیه یک برنامه وب با فریمورک Spring و بدون استفاده از Spring Boot مراحل زیر باید انجام شود:
۱- مسیر برنامه طبق استاندارد JavaEE باید دارای یک پوشه به نام WEB-INF بوده که پوشههای lib و classes در آن قرار دارند. در این پوشهها کلاسهای کتابخانههای مورد نیاز برنامه ( dependencies ) قرار خواهند گرفت.
۲- فایلهای html ، css ، js و … در پوشههای مربوط به خود قرار خواهند گرفت.
۳-فایلی با نام web.xml که شامل تعریف سرولت DispatcherServlet است باید طبق استاندارد servlet ایجاد و پیکربندی شود.
۴-bean های مورد نیاز برنامهی وب باید در ApplicationContext و در فایلهای *-servlet.xml به صورت کامل تعریف شوند.
۵- کنترلرها و کلاسهایی که منطق برنامه و عملیات برنامه را انجام میدهند باید پیادهسازی شوند.
۶- پس از ایجاد فایلهای مورد نیاز باید با کمک ابزارهای ساخت مختلف مانند maven، gradle و … فایل نهایی war تولید شود.
۷- فایل war تولید شده جهت اجرا نیازمند به یک Servlet Container است که میتوان از tomcat، jetty ، undertow و یا موارد دیگر استفاده کرد.
هدف کلی Spring Boot کاهش مراحل تکراری و تنظیمی مربوط به پیکربندی برنامه است و به صورت خودکار تنظیمات بسیاری از بخشهای مختلف مانند تنظیمات وب، اتصال به پایگاه داده، تنظیمات مربوط به امنیت برنامه و موارد دیگر را انجام میدهد و به طور کلی همهی موارد به جز مرحلهی پنجم در موارد بالا نیاز به ایجاد و یا پیکربندی توسط برنامهنویس نخواهد بود.
جهت ایجاد یک برنامهی وب توسط Spring Boot میتوان ساختار کلی یک پروژه را با توجه به نیازمندیها از start.spring.io دریافت کرد. به عنوان مثال جهت ایجاد یک برنامه وب با کمک Spring Boot با استفاده از دستور زیر میتوان فایلها و نیازمندیهای اولیه را تعریف کرد.
$ curl -s https://start.spring.io/starter.zip -o myapp.zip -d type=maven-project –d dependencies=web
در این مرحله یک برنامه قابل اجرای وب با فریمورک Spring ایجاد و پیکربندی شده است و میتوان کنترلرها و سرویسها و کامپوننتهای مورد نیاز برنامه را به آن اضافه کرد.
به عنوان مثال با اضافه کردن کنترلر در مسیر \src\main\java\com\example از فایل اکسترکت شده در مرحله قبل جهت تعریف کنترلر به شکل زیر عمل خواهیم کرد.
@RestController class HelloWorldController { @RequestMapping("/") String home() { return "Hello World!"; } }
با کمک دستور زیر میتوانیم برنامهی نوشته شده با Spring Boot را اجرا کنیم.
mvn spring-boot:run
پس از بازکردن آدرس http://localhost:8080 عبارت !!Hello World نمایش داده خواهد شد.
به این ترتیب یک برنامه وب با کمک فریمورک Spring در کمترین زمان ایجاد شده است.
جهت جمع بندی مطالب ویژگیهایی که Spring Boot در برنامه نوشته شده با کمک این پروژه را ایجاد میکند را بررسی خواهیم کرد.
۱- با کمک Spring Boot امکان توسعهی برنامههای بومی ابری که الگوهای ۱۲فاکتور را دنبال میکنند فراهم است.
۲-استفاده از Spring Boot منجر به کاهش زمان توسعه میشود که نتیجهی آن افزایش بهرهوری است.
۳-یک برنامهی Spring سازمانی با کمک Spring Boot به سادگی ایجاد و توسعه داده میشود.
۴- نیازمندیهای غیر عملیاتی مانند actuator و embedded container ها به صورت خودکار پیکربندی میشوند.
۵- امروزه مفهوم میکروسرویسها با داشتن ویژگیهای توسعهپذیری بالا، دسترسپذیری بالا، قابلیت اعتماد و … در بین برنامهنویسان اهمیت زیادی دارند که Spring Boot با ویژگیهای خود به خوبی در این حیطه قابل تعریف و استفاده است.
امروزه به صورت کلی جهت ایجاد پروژههای Spring از پروژهی Spring Boot استفاده میشود و جهت اشنایی بیشتر توصیه میشود مستندات مربوط به آن مطالعه شود.
منابع:
- Pro Spring Boot, Felipe Gutierrez, Apress 2016
- Spring Boot reference manual
سلام آقا حمید بسیار ممونم بابت توضحیات عالیتون، فقط دوباره یکسری سوال پیش اومده :
بنده هنوز تازه واردهستم یه خورده مطالب برام خیلی سخت جا میافته ببخشید اگه سوالی میکنم که مهندسی یا اشتباهه ببخشید به بنده حق بدید.
سوال :
من هنوز تفاوت Spring boot با spring MVC متوجه نشدم!!
لایه ها رو تا حدودی میدونم اگه اشتباهه ممنون میشم راهنمایی بفرمایید :
ویو (view) : جی اس پی و …
Model : Hibernate
Controller : Spring core
برای امنیت :
Spring Security استفاده می کنیم .
این قسمت از متن شما رو خواندم:
Spring Boot همونطور که توی این مطلب اشاره شد برای پیکربندی و تنظیمات Spring استفاده میشه. مثلا با داشتن یک پروژهی وب Spring Boot به صورت خودکار تنظیمات اولیه ماژول Spring MVC را انجام میده.
—–
به این سوال رسیدم :
برای استفاده از spring MVC باید از Boot استفاده کنیم ؟
اقا حمید اگه امکانش من ایمیل شما رو داشته باشم . (ایمیل بدید واقعا ممنون شما بزرگ وار میشم)
سلام . ممنون آقا حمید عالی بود.
فقط دو تا سوال :
1- تفاوت spring boot با spring mvc در چیست؟
2- بعضی از پروژه های spring mvc برای لایه view از jsp , thymeleaf , … اما بعضی از پروژه ها لایه (view) از html. استفاده میکنند میخوام بدونم فرق اینکه ما صفحه ویو با thymeleaf بزینم یا html چه فرقی میکنه ؟ اگر پروژه نسبتا بزرگ میشه برای لایه ویو از html. استفاده کرد؟
ممنون از سایت خوبتون.
سلام
Spring MVC ماژولی از پروژهی Spring هست که توسط اون امکان نوشتن برنامههای وب با الگوی MVC فراهم میشه و Spring Boot همونطور که توی این مطلب اشاره شد برای پیکربندی و تنظیمات Spring استفاده میشه. مثلا با داشتن یک پروژهی وب Spring Boot به صورت خودکار تنظیمات اولیه ماژول Spring MVC را انجام میده. دقت کنیم که Spring Boot برای راحتتر کردن استفاده از سایر ماژولهای Spring ایجاد شده و خودش به تنهایی کار خاصی انجام نمیده ولی Spring MVC به منظور برنامهنویسی MVC با کمک کنترلرها و سایر ویژگیهای مربوط به خود استفاده میشود.
در مورد لایه ویوو هر کدوم از مواردی که گفتید قابل استفاده هستن، پیشنهاد من این است که برای سمت کلاینت از فریمورکهای جاوااسکریپتی مانند Angular استفاده بشه و توسط Spring صرفا سرویسهای مورد نیاز پیاده بشن.