Adloun

Spring Boot : écrire le serveur (école d'ingénieur) · Chapitre 11 · Application directe du cours

Un indicateur pour le catalogue

Mettre en production · niveau 2

Énoncé

Ajouter à la santé un indicateur « catalogue », qui donne le nombre de livres et le nombre de livres en rupture, et qui passe à DOWN si le catalogue est vide.

Corrigé

Un bean qui implémente HealthIndicator. Le nom du composant dans la réponse est celui du bean, d'où @Component("catalogue") (sans nom, il s'appellerait catalogueSante).


/**
 * Exercice 11.2 : « catalogue » dans /actuator/health — le nom du bean, d'où
 * {@code @Component("catalogue")}. Hors service si le catalogue est vide.
 */
@Component("catalogue")
public class CatalogueSante implements HealthIndicator {

    private final LivreDepot livres;

    public CatalogueSante(LivreDepot livres) {
        this.livres = livres;
    }

    @Override
    public Health health() {
        long total = livres.count();
        long enRupture = livres.findAll().stream().filter(l -> l.getStock() == 0).count();
        Health.Builder etat = total > 0 ? Health.up() : Health.down();
        return etat.withDetail("livres", total).withDetail("enRupture", enRupture).build();
    }
}

$ curl -s -u admin:libraire-2026 http://localhost:8000/actuator/health/catalogue
{"details":{"livres":6,"enRupture":1},"status":"UP"}

    @Test
    void lIndicateurDuCatalogueApparaitPourLAdministrateur() {
        assertThat(mvc.get().uri("/actuator/health").header("Authorization", "Basic YWRtaW46bGlicmFpcmUtMjAyNg=="))
                .hasStatusOk()
                .bodyJson().extractingPath("$.components.catalogue.details.livres").isEqualTo(6);
        assertThat(mvc.get().uri("/actuator/health"))
                .bodyJson().doesNotHavePath("$.components");
    }

(YWRtaW46bGlicmFpcmUtMjAyNg== est admin:libraire-2026 en Base64.) Charger tous les livres pour les compter n'est raisonnable qu'avec un petit catalogue ; une requête de comptage dans le dépôt ferait mieux, car un indicateur est interrogé souvent.

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →