web-dev-qa-db-fra.com

spring.config.location ne fonctionne pas sur la chaussure de ressort 2.0.0 M6

Je suis en train de migrer l'un de mes micro-services vers Spring Boot 2.0.0.M6 et j'ai eu une erreur en utilisant l'option --spring.config.location= sur la ligne de commande. L'erreur est la suivante:

Caused by: Java.lang.IllegalArgumentException: Could not resolve placeholder 'property' in value "${property}"
at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.Java:172) ~[spring-core-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.Java:124) ~[spring-core-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.Java:237) ~[spring-core-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.Java:211) ~[spring-core-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.Java:175) ~[spring-context-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.Java:834) ~[spring-beans-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.Java:1081) ~[spring-beans-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.Java:1060) ~[spring-beans-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.Java:578) ~[spring-beans-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.Java:91) ~[spring-beans-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.Java:367) ~[spring-beans-5.0.1.RELEASE.jar:5.0.1.RELEASE]
... 50 common frames omitted

Si je n'utilise pas le fichier de propriétés personnalisé, tout fonctionne comme prévu ou utilise les versions RELEASE. Je lance l'application avec la commande suivante: 

Java -jar application.jar --spring.config.location=app.properties 

Mettre à jour

Je remarque que lorsque cette option est utilisée, Spring remplace complètement le fichier application.properties par défaut du projet, contrairement aux versions précédentes de Spring qui écrasent simplement les propriétés du fichier d'arguments. Est-ce un bug?

Mise à jour 2

Vous avez une réponse de la part de l'équipe, apparemment, c'est le comportement voulu. Essayer de savoir maintenant s'il existe un moyen d'utiliser le comportement des anciennes versions.

8
Samuel Birocchi

Comme indiqué par l'équipe de Spring, la manière correcte d'utiliser l'ancien comportement du spring.config.location consiste à utiliser le nouveau spring.config.additional-location

11
Samuel Birocchi

Votre structure de projet serait d'une grande aide. Mais à part ça.

Spring docs donne un exemple d'utilisation du drapeau:

    --spring.config.location=classpath:/default.properties

Essayez de résoudre les propriétés de votre application par rapport au classpath.

0
Kacper Roszczyna