Le fichier de propriétés suivant est défini dans l'un de mes fichiers de configuration Spring:
<context:property-placeholder location="classpath:project.properties"/>
Maintenant, je veux remplacer quelques propriétés d'un fichier de propriétés externe qui ne se trouve pas dans le chemin d'accès aux classes.
Disons que mon projet est déployé quelque part et que j'ai besoin d'un changement de configuration dynamique. Je ne veux pas mettre à jour le code base du projet dans le conteneur (Tomcat ou autre).
1.) J'ai donc besoin d'un moyen qui mette à jour (remplace) les valeurs du fichier de propriétés chargé de spring avec mes dernières mises à jour dans le fichier de propriété externe.
2.) Ce serait bien si quelqu'un pouvait également partager le moyen d'actualiser les propriétés préchargées.
J'ai donc besoin d'un moyen qui mette à jour (remplace) les valeurs du fichier de propriétés chargé de spring avec mes mises à jour récentes dans le fichier de propriétés externe.
Vous pouvez utiliser le PropertyPlaceholderConfigurer .
Si vous voulez utiliser l’espace de noms context
<context:property-placeholder location="classpath:yourClasspath.properties,file:/some/resource/path/filePropertiesToOverride.properites"/>
ou de cette façon
<bean id="placeholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:yourClasspath.properties</value>
<value>file:/some/resource/path/filePropertiesToOverride.properites</value>
</list>
</property>
</bean>
Selon le javadoc de PropertiesLoaderSupport.setLocations (Resource [])
... Remarque: Les propriétés définies dans les fichiers ultérieurs remplacent les propriétés définies dans les fichiers précédents, en cas de chevauchement des clés. Par conséquent, assurez-vous que les fichiers les plus spécifiques sont les derniers de la liste d'emplacements donnée.
.
Ce serait formidable si quelqu'un pouvait également partager le moyen d'actualiser les propriétés préchargées.
Pour le moment, vous utilisez une variable PropertyPlaceholderConfigurer
. Etant donné qu'une PropertyPlaceholderConfigurer
est une BeanFactoryPostProcessor
, elle traverse les définitions de bean (représentation de l'objet du beans.xml
) et remplace les chaînes de propriété (telles que $ {someProp}). Après cela, les beans sont instanciés et initialisés. Il n'y a donc aucun moyen de "recharger" les propriétés.
Il y a encore plus à considérer si vous souhaitez créer une application pouvant réagir aux modifications de propriétés au moment de l'exécution:
Au moins, je recommanderais d'utiliser Apache commons configuration . Mais ce n’est qu’un cadre qui résout quelques problèmes et il vous reste à réfléchir aux solutions aux problèmes ci-dessus.
au printemps botte 2, c'est
Java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
Vous pouvez obtenir tous les détails dans https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html