spring - mvc - taglib jstl
¿Cómo agregar un chequeo de salud personalizado en la salud de arranque de primavera? (3)
Agregar un chequeo de salud personalizado es fácil. Simplemente cree una nueva clase Java, extiéndala desde AbstractHealthIndicator e implemente el método doHealthCheck. El método obtiene un constructor pasado con algunos métodos útiles. Llame a builder.up () si su salud es correcta o builder.down () si no lo es. Lo que hagas para comprobar la salud depende completamente de ti. Tal vez usted quiera hacer ping a algún servidor o revisar algunos archivos.
@Component
public class CustomHealthCheck extends AbstractHealthIndicator {
@Override
protected void doHealthCheck(Health.Builder bldr) throws Exception {
// TODO implement some check
boolean running = true;
if (running) {
bldr.up();
} else {
bldr.down();
}
}
}
Esto es suficiente para activar la nueva comprobación de estado (asegúrese de que @ComponentScan esté en su aplicación). Reinicie su aplicación y ubique su navegador en el punto final de / salud y verá la nueva revisión de estado agregada.
{
"status":"UP",
"CustomHealthCheck": {
"status":"UP"
},
"diskSpace": {
"status":"UP",
"free":56443746,
"threshold":1345660
}
}
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Esto agregará varios puntos finales útiles a su aplicación. Uno de ellos es / salud. Cuando inicie su aplicación y navegue hasta el punto final / salud, verá que ya devuelve algunos datos.
{
"status":"UP",
"diskSpace": {
"status":"UP",
"free":56443746,
"threshold":1345660
}
}
¿Cómo agregar un chequeo de salud personalizado en la salud de arranque de primavera?
Spring Boot 2.X ha cambiado significativamente el actuador. Un nuevo y mejor mecanismo para extender los puntos finales existentes se habilita a través de @EndpointWebExtension
.
Dicho esto, el punto final de la salud es un poco más difícil de extender porque una sola extensión se proporciona fuera de la caja mediante el propio actuador. Sin manipular el proceso de inicialización de beans, su aplicación no podrá iniciarse, ya que verá 2 extensiones y no entenderá cuál elegir. Una forma más fácil sería utilizar la información en su lugar y extenderla:
@Component
@EndpointWebExtension(endpoint = InfoEndpoint.class)
public class InfoWebEndpointExtension {
@Value("${info.build.version}")
private String versionNumber;
@Value("${git.commit.id}")
private String gitCommit;
@Value("${info.build.name}")
private String applicationName;
...
@ReadOperation
public WebEndpointResponse<Map> info() {
No olvide que también puede volver a asignar direcciones URL. En mi caso, prefiero / status a / health y no quiero / actuator / en la ruta:
management.endpoints.web.base-path=/
management.endpoints.web.path-mapping.info=status
Otra razón por la que prefiero / info es porque no obtengo esta estructura anidada, que es la predeterminada para / health :
{
"status": {
"status": "ON",
Desde Spring Boot 2.X
Como lo indica @ yuranos87, el concepto de actuador ha cambiado en Spring Boot 2.X, pero aún puede agregar controles de estado personalizados fácilmente implementando HealthIndicator
o para aplicaciones ReactiveHealthIndicator
:
@Component
public class CacheHealthIndicator implements HealthIndicator {
@Override
public Health health() {
long result = checkSomething())
if (result <= 0) {
return Health.down().withDetail("Something Result", result).build();
}
return Health.up().build();
}
o
@Component
public class CacheHealthIndicator implements ReactiveHealthIndicator {
@Override
public Mono<Health> health() {
return Mono.fromCallable(() -> checkSomething())
.map(result -> {
if (result <= 0) {
return Health.down().withDetail("Something Result", result).build();
}
return Health.up().build();
});
}
}
Además, puede agregar o ampliar cualquier punto final con @Endpoint
o @EndpointWebExtension
. Los puntos finales aquí son info
, health
y muchos más. Por lo tanto, puede agregar un control de estado personalizado utilizando @Endpoint
pero es mucho más fácil hacerlo con HealthIndicator
.
Puede encontrar más información sobre controles de estado personalizados y puntos finales personalizados en la documentación de arranque de Spring.