2009-02-27 7 views
5

J'utilise Spring 2.5.6. J'ai un bean dont les propriétés sont assignées à partir d'un fichier de propriétés via un PropertyPlaceholderConfigurer. Je me demande s'il est possible que la propriété du bean soit mise à jour lorsque le fichier de propriétés est modifié. Il y aurait par exemple un processus périodique qui vérifie la dernière date de modification du fichier de propriétés, et s'il a changé, rechargez le bean.Avoir les propriétés du haricot de printemps actualisées automatiquement à partir du fichier de propriétés

Je me demande s'il y a déjà quelque chose qui satisfait mes exigences. Si non, quelle serait la meilleure approche pour résoudre ce problème?

Merci pour votre aide.

Répondre

3

Vous pouvez également utiliser le PropertyOverrideConfigurer de Spring. Pourrait relire les propriétés et le réappliquer dans un bean polling/schedular.

Cela dépend de la façon dont les beans configurés utilisent ces propriétés. Ils pourraient, par exemple, indirectement les mettre en cache quelque part eux-mêmes.

+0

Il semble que ce soit l'approche la plus simple, et c'est ce que nous finirons par faire. Merci –

+0

Je ne vois pas la différence entre PropertyOverrideConfigurer et PropertyPlaceholderConfigurer à cet égard. Il existe des différences quant à la spécification des propriétés, mais les deux ne sont appliquées qu'une seule fois en tant que BeanFactoryPostProcessor avant la création des beans réels. Comment doivent-ils être réappliqués? –

+0

@hstoerr: Avec un PropertyPlaceholderConfigurer, les paramètres sont 'cachés' dans la configuration printanière (xml) (avec les expressions {..}). Avec PropertyOverrideConfigurer, la configuration est au format de beanName.property = value. Cela peut donc être appliqué de nouveau sur les haricots existants (par exemple PropertyOverrideConfigurer.processProperties – jor

0

Une façon de faire est d'intégrer une console groovy dans votre application. Here's quelques instructions. Ils étaient très simples à faire, btw - m'a pris très peu de temps même si je ne suis pas familier avec groovy. Une fois que vous faites cela, vous pouvez simplement aller dans la console et modifier les valeurs dans l'application en direct à la volée.

2

Si vous voulez des propriétés dynamiques au moment de l'exécution, JMX est peut-être un autre moyen de le faire.

0

Vous pouvez essayer d'utiliser une étendue personnalisée pour le bean qui recrée des beans sur les modifications du fichier de propriétés. Voir mon more extensive answer here.

0

Spring Cloud Config dispose de fonctionnalités permettant de modifier les propriétés de configuration à l'exécution via le bus Spring Cloud et à l'aide d'un serveur Cloud Config. La configuration ou les fichiers .properties ou .yml sont "externalisés" à partir de l'application Spring et récupérés à la place à partir d'un serveur Spring Cloud Config auquel l'application se connecte au démarrage. Que Cloud Config Server récupère les fichiers de configuration .properties ou .yml appropriés à partir d'un repo GIT (il existe d'autres solutions de stockage, mais GIT est la plus courante). Vous pouvez ensuite modifier la configuration lors de l'exécution en modifiant le contenu des fichiers de configuration du repo GIT - Le serveur Cloud Config diffuse les modifications à toutes les applications Client Spring via Spring Cloud Bus, et la configuration de ces applications est mise à jour sans redémarrage du app. Vous pouvez trouver un exemple simple de travail ici: https://github.com/ldojo/spring-cloud-config-examples

Questions connexes