نقاط نهاية Spring Boot Actuator تتيح لنا مراقبة والتفاعل مع تطبيقنا. يعتبر Spring Actuator وحدة فرعية لـ Spring Boot ويوفر نقاط انتهاء مدمجة يمكننا تمكينها وتعطيلها لتطبيقنا.
نقاط نهاية Spring Boot Actuator
تتمتع نقاط نهاية Spring Boot Actuator بجميع الوظائف المتاحة عبر بروتوكول JMX و HTTP، وفي معظم الأحيان نستخدم نقاط انتهاء Actuator القائمة على HTTP لأنها سهلة الوصول عبر المتصفح وأمر CURL ونصوص الشيل وما إلى ذلك. بعض نقاط النهاية المفيدة هي:
- beans: تعيد هذه النقطة قائمة بجميع الفئات المكونة في تطبيقنا.
- env: توفر معلومات حول خصائص بيئة Spring.
- health: يعرض حالة التطبيق.
- info: يعرض معلومات التطبيق، يمكننا تكوينه في خصائص بيئة Spring.
- mappings: يعرض قائمة بجميع مسارات @RequestMapping.
- shutdown: يسمح لنا بإيقاف التطبيق بشكل سلس.
- threaddump: يوفر تفريغ الخيوط للتطبيق.
يمكنك الحصول على القائمة الكاملة لنقاط نهاية عامل الربيع من هنا.
أمان نقاط نهاية عامل الربيع
يتم عرض نقاط “الصحة” و “المعلومات” فقط بدون أمان، للوصول إلى جميع النقاط الأخرى، يجب تكوين تطبيقنا لأمان الربيع. هذا أمر سهل للغاية لتحقيقه، سنتعامل مع ذلك في الجزء اللاحق من البرنامج التعليمي.
تمكين نقاط نهاية عامل الربيع
عندما نضيف تبعيات عامل الربيع لمشروعنا بتقنية spring boot، يتم تمكين نقاط الربيع تلقائيًا. أضف التبعيات أدناه إلى تطبيق الربيع الخاص بك لتمكين نقاط نهاية عامل الربيع.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
الآن عند تشغيل التطبيق، سترى تسجيل نقاط عامل الربيع يتم ربطها في السجلات.
2018-06-19 15:23:20.715 INFO 6493 --- [main] o.s.b.a.e.web.EndpointLinksResolver: Exposing 2 endpoint(s) beneath base path '/actuator'
2018-06-19 15:23:20.723 INFO 6493 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/health],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 15:23:20.724 INFO 6493 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/info],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
يرجى ملاحظة أنه تم تعيين نقطتي النهاية فقط – health
و info
. يوضح الصورة أدناه إخراج هذه النقاط النهائية.
هل لاحظت أنه لا توجد بيانات في
/actuator/info
، وذلك لأننا لم نقم بتكوينها. ما عليك سوى إضافة الخصائص التالية إلى ملف application.properties
الخاص بك.
info.app.name=Spring Actuator Example
info.app.java.version=10
info.app.type=Spring Boot
أعد تشغيل التطبيق وستحصل على الإخراج التالي:
تخصيص مسارات نقاط Actuator الأساسية
بشكل افتراضي، مسار القاعدة لنقاط actuator هو /actuator
، يمكننا تغييره إلى قيمة أخرى عن طريق تعيين management.endpoints.web.base-path
في ملف خصائص التطبيق.
management.endpoints.web.base-path=/management
تعريض نقاط Actuator الأخرى
يمكننا تمكين وتعطيل نقاط actuator الأخرى من خلال ملفات الخصائص. إذا كنت ترغب في تمكين جميع نقاط actuator، ثم أضف الخصائص التالية.
management.endpoints.web.exposure.include=*
لتمكين نقاط نهاية المحركات الفعالة المحددة فقط، قدم قائمة بمعرفات نقطة النهاية.
management.endpoints.web.exposure.include=health,info,beans,env
أمان الربيع لنقاط نهاية المحركات
لاحظ أننا بحاجة إلى إضافة أمان الربيع إلى تطبيقنا لتمكين نقاط النهاية الإضافية لأن جميع نقاط النهاية الأخرى تحتاج على الأقل إلى المصادقة الأساسية. أضف التبعية التالية لأمان الربيع في تطبيقك.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
كذلك، أضف اسم المستخدم وكلمة المرور لأمان الربيع في ملف خصائص التطبيق.
spring.security.user.name=pankaj
spring.security.user.password=pankaj
أعد تشغيل التطبيق وسترى نقاط نهاية إضافية تم تعيينها.
2018-06-19 16:18:22.211 INFO 6627 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/beans],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 16:18:22.212 INFO 6627 --- [ main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/env],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 16:18:22.212 INFO 6627 --- [ main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/env/{toMatch}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
الآن، عندما تحاول الوصول إلى نقاط نهاية المحركات المؤمنة، سيتعين عليك تقديم بيانات اعتماد تسجيل الدخول. تُظهر الصور أدناه استجابة نقاط النهاية
beans
و env/java.home
.
نقاط نهاية مخصصة لمحرك الربيع
واحدة من الميزات الرائعة لإطار Spring هي أنه من السهل جدًا توسيعه. يمكننا إنشاء نقاط نهاية المحرك المخصصة الخاصة بنا باستخدام تعليق @Endpoint
على صف. ثم يتعين علينا استخدام التعليقات @ReadOperation
و @WriteOperation
و @DeleteOperation
على الأساليب لتعريضها كنقطة نهاية محرك فولتميتر. يمكننا إنشاء نقاط نهاية خاصة بتقنية معينة باستخدام التعليقات @JmxEndpoint
و @WebEndpoint
. إليك مثالًا على نقطة نهاية محرك الفولتميتر المخصصة الخاصة بنا.
package com.journaldev.spring;
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Endpoint(id="myendpoint")
@Component
public class MyCustomEndpoints {
@ReadOperation
@Bean
public String hi() {
return "Hi from custom endpoint";
}
}
هل لاحظت معرف النقطة النهائية؟ نحن أيضًا بحاجة إلى تكوين هذا في قائمة نقاط النهاية ليتم تمكينها. قم بتحديث الخصائص التالية في ملف application.properties
.
management.endpoints.web.exposure.include=health,info,beans,env,myendpoint
الآن عند بدء التطبيق، تحقق مما إذا كانت هذه النقطة النهائية الجديدة معينة في السجلات.
2018-06-19 17:06:59.743 INFO 6739 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/myendpoint],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
الصورة أدناه تظهر الناتج عند استدعاء نقطة نهاية محرك الفولتميتر المخصصة الخاصة بنا.
ملخص
إطار Spring Boot Actuator هو وحدة إدارة ومعلومات جاهزة للإنتاج. يمكننا توسيعه بسهولة لإضافة واجهات برمجة تطبيقات خاصة بنا وإدارة تطبيقنا.
يمكنك تنزيل المشروع الكامل من مستودع GitHub الخاص بنا.
Source:
https://www.digitalocean.com/community/tutorials/spring-boot-actuator-endpoints