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
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?
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.
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
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.