Actuador de bota de resorte

Spring Framework es la plataforma más utilizada que se lanzó en octubre de 2002 para crear aplicaciones basadas en web efectivas y eficientes. Además, el marco Spring Boot se lanzó en abril de 2014 para superar el engorroso esfuerzo de la configuración manual. La moto principal de Spring Boot fue lograr la función de configuración automática. Con la ayuda de esta y otras características, podemos crear una aplicación web Spring independiente. El desarrollo y la gestión de una aplicación son los dos aspectos más importantes del ciclo de vida de la aplicación. Es muy importante saber qué está pasando debajo de la aplicación. Además, cuando ponemos la aplicación en producción, administrarla gradualmente se vuelve de vital importancia. Por lo tanto, siempre se recomienda monitorear la aplicación tanto en la fase de desarrollo como en la fase de producción. 

Ventajas de Monitorear/Administrar la Aplicación

  1. Aumenta la satisfacción del cliente.
  2. Reduce el tiempo de inactividad.
  3. Aumenta la productividad.
  4. Mejora la Gestión de la Ciberseguridad.
  5. Aumenta la tasa de conversión.

Bota de resorte – Actuador

  • Con la ayuda de Spring Boot, podemos lograr los objetivos anteriores.
  • La dependencia ‘Actuator’ de Spring Boot se usa para monitorear y administrar la aplicación web Spring.
  • Podemos usarlo para monitorear y administrar la aplicación con la ayuda de puntos finales HTTP o con JMX.
Working of the Spring's Actuator

Funcionamiento del actuador de resorte

Para usar el ‘Actuador’, agregue la siguiente dependencia en la compilación del proyecto de su aplicación.

Maven -> pom.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
</dependencies>
Gradle -> build.gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
}
Project Structure - Maven

Estructura del proyecto – Maven

pom.xml (Configuración de la Aplicación Web)

XML

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                             https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>sia</groupId>
    <artifactId>GFG-ACTUATOR</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>GFG-ACTUATOR</name>
    <description>Spring Boot Starter Actuator</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
  
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
  
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

GfgActuatorApplication.java (Bootstrapping de la aplicación)

Java

package gfg;
  
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
  
@SpringBootApplication
public class GfgActuatorApplication {
  
    public static void main(String[] args)
    {
        SpringApplication.run(GfgActuatorApplication.class,
                              args);
    }
}

UserEntity.java (clase de entidad que representa los datos del modelo)

  • Esta clase actúa como un bean Java simple cuyas propiedades son devueltas como respuesta JSON por el método get() de la API REST.
  • La biblioteca ‘Lombok’ se usa para generar métodos GETTER/SETTER automáticamente en tiempo de ejecución usando la anotación ‘ @Data ‘.
  • La anotación ‘ @RequiredArgsConstructor ‘ se utiliza para generar un constructor de cero argumentos y si están presentes los campos final o ‘ @NonNull’ , se crea el constructor de argumentos respectivo.
  • Para agregar la biblioteca ‘Lombok’ en su aplicación, agregue la siguiente dependencia en la compilación del proyecto de su aplicación.
Maven -> pom.xml

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

La anotación ‘@Component’ se usa para que este bean se registre automáticamente en el contexto de la aplicación de Spring.

Java

package gfg;
  
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
  
@Component
@Data
@RequiredArgsConstructor
public class UserEntity {
    String id = "1";
    String name = "Darshan.G.Pawar";
    String userName = "@drash";
    String email = "drash@geek";
    String pincode = "422-009";
}

RESTfulController.java (Un controlador API REST)

El método get() de este controlador usa el bean UserEntity para devolver la respuesta JSON. El bean UserEntiy se subcontrata a través de la anotación ‘ @Autowired ‘ que se registró en el contexto de la aplicación de Spring.

Java

package gfg;
  
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
  
@RestController
@RequestMapping("/get")
public class RESTfulController {
  
    @Autowired
    UserEntity entity;
    
    @GetMapping("/data") public UserEntity getEntity()
    {
        return entity;
    }
}

Producción:

Aquí, la extensión JSON Formatter Chrome se usa para analizar automáticamente el cuerpo JSON. Además, se requerirá que funcione con ‘Actuador’.

Respuesta JSON devuelta por la API REST

Trabajar con el actuador Spring Boot

Para acceder a los servicios del ‘Actuador’, tendrá que usar el punto final HTTP, ya que se vuelve confiable para trabajar con él. El punto final predeterminado es ‘/actuador’.

Ejemplo:

También puede cambiar el punto final predeterminado agregando lo siguiente en el archivo application.properties.

management.endpoints.web.base-path=/details

Puede hacer clic en estos enlaces anteriores y ver la información respectiva. Además, puede activar otras ID de actuador y usarlas después de ‘/actuador’ para ver más información. Por ejemplo, la ID de ‘salud’ está activada de forma predeterminada. Por lo tanto, puede hacer clic en el enlace de la imagen o usar directamente ‘http://localhost:8080/actuator/health’.

La salud de una aplicación

‘UP’ significa que la salud de la aplicación es buena. Hay un total de 25 identificaciones, de las cuales las más utilizadas se enumeran aquí:

IDENTIFICACIÓN                              

Descripción                                                                                                                                                                 

frijoles Muestra una lista completa de todos los frijoles Spring en su aplicación.
cachés  Expone los cachés disponibles.
condiciones Muestra las condiciones que se evaluaron en las clases de configuración y autoconfiguración y las razones por las que coincidieron o no.
salud Muestra información sobre el estado de la aplicación.
seguimiento http Muestra información de seguimiento HTTP (de forma predeterminada, los últimos 100 intercambios de solicitud-respuesta HTTP). Requiere un bean HttpTraceRepository.
madereros Muestra y modifica la configuración de registradores en la aplicación.
asignaciones Muestra una lista recopilada de todas las rutas @RequestMapping.
sesiones Permite la recuperación y eliminación de sesiones de usuario de un almacén de sesiones respaldado por Spring Session. Requiere una aplicación web basada en servlet que use Spring Session.
volcado de subprocesos Realiza un volcado de subprocesos.

Accediendo al ID de ‘beans’ del proyecto anterior

Accediendo al ID de ‘asignaciones’ del proyecto anterior

Incluyendo ID/puntos finales

De forma predeterminada, todos los ID se configuran como falsos, excepto ‘salud’. Para incluir un ID, use la siguiente propiedad en el archivo application.properties.

management.endpoint.<id>.enabled

Example -> management.endpoint.metrics.enabled=true

O bien, puede enumerar todos los ID que desea incluir separados por una coma.

management.endpoints.web.exposure.include=metrics,info

Esto incluirá solo métricas e ID de información y excluirá todos los demás (‘salud’ también). Para agregar/incluir toda la información de identificación sobre su aplicación, puede hacerlo en el archivo application.properties simplemente agregando lo siguiente:

management.endpoints.web.exposure.include=*

Producción:

Todos los ID o el punto final ahora están habilitados

Excluyendo ID/puntos finales

Para excluir un ID o punto final, use la siguiente propiedad y enumere los ID respectivos separados por una coma en el archivo application.properties.

management.endpoints.web.exposure.exclude

Example -> management.endpoints.web.exposure.exclude=info

Utilice ‘*’ en lugar de ID en la propiedad para excluir todos los ID o puntos finales.

Notas: 

  1. Antes de configurar management.endpoints.web.exposure.include, asegúrese de que los actuadores expuestos no contengan información confidencial.
  2. Deben estar protegidos colocándolos detrás de un firewall o están protegidos por algo como Spring Security.

Publicación traducida automáticamente

Artículo escrito por pawardarshan461 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *