Gli endpoint di Spring Boot Actuator ci permettono di monitorare e interagire con la nostra applicazione. Spring Actuator è un sottomodulo di Spring Boot e fornisce endpoint integrati che possiamo abilitare e disabilitare per la nostra applicazione.
Endpoint di Spring Boot Actuator
Gli endpoint di Spring Boot Actuator sono esposti tramite JMX e HTTP, nella maggior parte dei casi utilizziamo gli endpoint di Actuator basati su HTTP perché sono facili da accedere tramite browser, comando CURL, script shell, ecc. Alcuni degli endpoint di Actuator utili sono:
- beans: questo endpoint restituisce l’elenco di tutti i bean configurati nella nostra applicazione.
- env: fornisce informazioni sulle proprietà dell’ambiente Spring.
- health: Mostra lo stato di salute dell’applicazione
- info: Visualizza informazioni sull’applicazione, che possiamo configurare nelle proprietà dell’ambiente Spring.
- mappings: Visualizza l’elenco di tutti i percorsi @RequestMapping.
- shutdown: ci consente di arrestare l’applicazione in modo sicuro.
- threaddump: fornisce il dump dei thread dell’applicazione.
Puoi ottenere l’elenco completo dei punti di accesso dell’attuatore a molla da qui.
Sicurezza degli Endpoint dell’Attuatore a Molla
Solo i punti di accesso “health” e “info” sono esposti senza alcuna sicurezza, per accedere a tutti gli altri punti di accesso dobbiamo configurare la nostra applicazione per la sicurezza di spring. Questo è molto facile da ottenere, arriveremo a questo nella parte successiva del tutorial.
Abilita i Punti di Accesso dell’Attuatore a Molla
Quando aggiungiamo Dipendenze dell’Attuatore a Molla al nostro progetto spring boot, abilita automaticamente i punti di accesso dell’attuatore. Aggiungi le dipendenze seguenti alla tua applicazione spring per abilitare i punti di accesso dell’attuatore di spring boot.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Ora quando eseguirai l’applicazione, vedrai i punti di accesso dell’attuatore mappati nei log.
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>)
Nota che solo due endpoint – health
e info
sono stati mappati. Nell’immagine sottostante viene mostrato l’output di questi endpoint attuatori.
Hai notato che non ci sono dati in
/actuator/info
, è perché non li abbiamo configurati. Aggiungi semplicemente le seguenti proprietà al tuo file application.properties
.
info.app.name=Spring Actuator Example
info.app.java.version=10
info.app.type=Spring Boot
Riavvia l’applicazione e otterrai l’output seguente:
Personalizzazione del percorso di base degli endpoint attuatori
Per impostazione predefinita, il percorso di base degli endpoint attuatori è /actuator
, possiamo cambiarlo a qualsiasi altro valore impostando management.endpoints.web.base-path
nel file delle proprietà dell’applicazione.
management.endpoints.web.base-path=/management
Esposizione di altri endpoint attuatori
Possiamo abilitare e disabilitare altri endpoint attuatori tramite file di proprietà. Se vuoi abilitare tutti gli endpoint attuatori, aggiungi la seguente proprietà.
management.endpoints.web.exposure.include=*
Per abilitare solo endpoint attuatori specifici, fornisci l’elenco degli ID degli endpoint.
management.endpoints.web.exposure.include=health,info,beans,env
Spring Security per gli endpoint attuatori
Nota che è necessario aggiungere Spring Security alla nostra applicazione per abilitare endpoint aggiuntivi, poiché tutti gli altri endpoint richiedono almeno l’autenticazione di base. Aggiungi la seguente dipendenza per la sicurezza di Spring nella tua applicazione.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Aggiungi anche il nome utente e la password di Spring Security nel file delle proprietà dell’applicazione.
spring.security.user.name=pankaj
spring.security.user.password=pankaj
Riavvia l’applicazione e vedrai che vengono mappati endpoint aggiuntivi.
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>)
Ora, quando cercherai di accedere agli endpoint attuatori protetti, dovrai fornire le credenziali di accesso. L’immagine sottostante mostra la risposta degli endpoint
beans
e env/java.home
.
Endpoint personalizzati di Spring Actuator
Una delle grandi caratteristiche di Spring Framework è che è molto facile da estendere. Possiamo creare i nostri endpoint personalizzati per l’attuatore utilizzando l’annotazione @Endpoint
su una classe. Poi dobbiamo utilizzare le annotazioni @ReadOperation
, @WriteOperation
, o @DeleteOperation
sui metodi per esporli come bean dell’endpoint dell’attuatore. Possiamo creare Endpoint specifici della tecnologia utilizzando le annotazioni @JmxEndpoint
e @WebEndpoint
. Ecco un esempio del nostro endpoint personalizzato per l’attuatore di Spring.
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";
}
}
Hai notato l’id dell’endpoint? Dobbiamo anche configurarlo nell’elenco degli endpoint dell’attuatore da abilitare. Aggiorna le seguenti proprietà nel file application.properties
.
management.endpoints.web.exposure.include=health,info,beans,env,myendpoint
Ora quando avvierai l’applicazione, controlla che questo nuovo endpoint venga mappato nei log.
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>)
L’immagine sottostante mostra l’output quando richiamiamo il nostro endpoint personalizzato per l’attuatore.
Riepilogo
Spring Boot Actuator è un modulo di gestione e informazioni pronto per la produzione. Possiamo facilmente estenderlo per aggiungere le nostre API e gestire la nostra applicazione.
Puoi scaricare il progetto completo dal nostro Repository GitHub.
Source:
https://www.digitalocean.com/community/tutorials/spring-boot-actuator-endpoints