web-dev-qa-db-fra.com

Comment réinitialiser un Spring Bean?

Est-il possible de réinitialiser un Spring Bean à l'exécution?

Mon bean utilise des paramètres statiques qui changent dans certains cas, puis je dois réinitialiser le bean.

8
Fip

Vous avez trois options pour mettre à jour le bean singleton dans le contexte du printemps, vous pouvez en choisir une adaptée à votre cas d'utilisation:

Méthode de rechargement dans le bean
Créez une méthode dans votre bean qui mettra à jour/rechargera ses propriétés. En fonction de votre déclencheur, accédez au bean à partir du contexte de printemps, puis appelez la méthode de rechargement pour mettre à jour les propriétés du bean (depuis singleton), il sera également mis à jour dans le contexte de printemps et partout où il est câblé/injecté automatiquement.

Supprimer et enregistrer le bean dans le registre
Vous pouvez utiliser DefaultSingletonBeanRegistry pour supprimer et réenregistrer votre bean. Le seul inconvénient est qu'il ne rafraîchira pas/ne rechargera pas l'ancienne instance de bean déjà câblé/injecté dans les classes de consommateurs.

DefaultSingletonBeanRegistry registry = (DefaultSingletonBeanRegistry) context.getBeanFactory();
registry.destroySingleton({yourbean}) //destroys the bean object
registry.registerSingleton({yourbeanname}, {newbeanobject}) //add to singleton beans cache

@ RefreshScope
Utile pour actualiser les propriétés de valeur de bean à partir des modifications de configuration. Mais il a un objectif très limité et spécifique. Ressource pour en savoir plus à ce sujet.

8
Amith Kumar

Vous pouvez ajouter la dépendance Spring Cloud à votre application et marquer votre bean avec les annotations @ConfigurationProperties et @RefreshScope. Après cela, l'appel à endpoint/refresh réinitialisera les propriétés @Value dans votre bean.

0
Igor Bljahhin