web-dev-qa-db-fra.com

@RefreshScope ne fonctionne pas - Spring Boot

Je suis l'approche décrite ici: https://github.com/jeroenbellen/blog-manage-and-reload-spring-properties , la seule différence est que dans mon cas, les propriétés sont en cours utilisé dans plusieurs classes, donc je les ai tous mis dans une seule classe utilitaire CloudConfig et je me réfère à ses variables en utilisant les getters. Voici à quoi ressemble la classe:

@Configuration
@RefreshScope
public class CloudConfig {

    static volatile int count; // 20 sec

    @Value("${config.count}")
    public void setCount(int count) {
        this.count = count;
    }

    public static int getCount() {
        return count;
    }

}

et j'utilise la variable count dans d'autres classes comme CloudConfig.getCount(). Je peux très bien charger les propriétés au démarrage mais je ne suis pas en mesure de les mettre à jour dynamiquement à la volée. Quelqu'un peut-il dire ce que je fais mal? Si au lieu de faire cette classe de configuration, je fais exactement ce que le didacticiel décrit, tout fonctionne bien mais j'ai du mal à l'adapter à mon cas d'utilisation. Quelqu'un peut-il dire ce qui me manque?

4
ion20

Toute personne confrontée à ce problème, veuillez vous assurer que les points suivants:

  1. Votre contrôleur est annoté avec @RefreshScope
  2. L'actionneur de démarrage à ressort est ajouté à votre dépendance, car c'est le module qui fournit réellement ces points de terminaison:

    org.springframework.boot ressort-démarrage-démarreur-actionneur

  3. Actualiser le point de terminaison a été mis à jour pour:

    http: // {adresse_ip}: {port}/actuator/refresh

  4. L'actualisation du point de terminaison n'est pas activée par défaut. Vous devez l'activer explicitement dans le fichier bootstrap.properties en ajoutant la ligne suivante:

    management.endpoints.web.exposure.include=*

J'ai activé tous les points de terminaison, tandis que vous pouvez également activer les points de terminaison spécifiques.

0
Bilal Ahmed Yaseen