web-dev-qa-db-fra.com

Le démarrage à ressort n'a pas pu résoudre le paramètre fictif dans la chaîne

J'exécute spring-boot sur un serveur Tomcat intégré via maven avec mvn clean install spring-boot:run. Mais chaque fois que je le lance, j'obtiens cette erreur:

Causée par: Java.lang.IllegalArgumentException: impossible de résoudre le paramètre 'langage' réservé dans la valeur de chaîne "$ {language}" at org.springframework.util.PropertyPlaceholderHelper.parseStringValue (PropertyPlaceholderHelper.Java:174) ~ [spring-core-4.3.6.RELEASE.jar: 4.3.6.RELEASE] at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders (PropertyPlaceholderHelper.Java:126) ~ [spring-core-4.3.6.RELEASE.jar: 4.3.6.RELEASE] at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders (AbstractPropertyResolver.Java:236) ~ [spring-core-4.3.6.RELEASE.jar: 4.3.6.RELEASE] at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders (AbstractPropertyResolver.Java:210) ~ [spring-core-4.3.6.RELEASE.jar: 4.3.6.RELEASE] at org.springframework.context.support.PropertySourcesPlaceholderConfigurer $ 2.resolveStringValue (PropertySourcesPlaceholderConfigurer.Java:172) ~ [spring-context-4.3.6.RELEASE.jar: 4.3.6.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue (AbstractBeanFactory.Java:831) ~ [spring-beans-4.3.6.RELEASE.jar: 4.3.6.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.Java:1086) ~ [spring-beans-4.3.6.RELEASE.jar: 4.3.6.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.Java:1066) ~ [spring-beans-4.3.6.RELEASE.jar: 4.3.6.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject (AutowiredAnnotationBeanPostProcessor.Java:585) ~ [spring-beans-4.3.6.RELEASE.jar: 4.3.6.RELEASE] at org.springframework.beans.factory.annotation.InjectionMetadata.inject (InjectionMetadata.Java:88) ~ [spring-beans-4.3.6.RELEASE.jar: 4.3.6.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues ​​(AutowiredAnnotationBeanPostProcessor.Java:366) ~ [spring-beans-4.3.6.RELEASE.jar: 4.3.6.RELEASE] ... 35 cadres communs omis

Cette erreur concerne ces deux lignes de code: 

@Value("${language}")
private String language;

Cet indicateur de langue est spécifié dans mon application.properties comme suit: 

application.properties

language=Java
logging.level.org.springframework=TRACE

Voici la partie qui prête à confusion: Lorsque je lance la construction sans la commande spring-boot: run, il se construit correctement et je peux exécuter le fichier jar construit sans aucun problème. Ce n'est que lorsque j'essaie de fonctionner sur le serveur Tomcat intégré que je rencontre ce problème. 

Je peux en quelque sorte contourner cela en faisant cela dans mon code: 

@Value("${language:Java}")
private String language;

Mais cela n’a aucun sens pour moi puisque spring est censé lire automatiquement la valeur par défaut à partir du fichier application.properties

EDIT: comme l'ont souligné des personnes, il ne lit pas du tout le code application.properties lorsqu'il est exécuté sur le serveur Tomcat intégré. Un moyen de le forcer à lire le fichier ou une raison pour laquelle il peut ne pas le lire? Cela fonctionne bien lorsqu'il est déployé sur un serveur d'applications externe au lieu du serveur intégré. 

Merci d'avance pour votre aide. 

2
aBrokenSniper

Fixé en ajoutant ces lignes au pom sous la section <resources>

<resource>
     <directory>src/main/resources</directory>
     <filtering>true</filtering>
     <includes>
          <include>**/*.properties</include>
     </includes>
</resource>

Ce que je ne comprends pas bien, c'est la nécessité de le faire. 

a) Je peux exécuter ceci sur un serveur d'applications externe sans avoir à ajouter cette ligne et l'application lit application.properties parfaitement. 

b) Je peux exécuter l'application en tant qu'application Java autonome dans Eclipse (c'est-à-dire sans avoir à créer l'application via maven) et elle lit application.properties parfaitement

c) Spring-Boot n'est-il pas censé le lire par défaut, de toute façon? (comme le montrent les deux cas ci-dessus?)

Merci à tous pour leur aide. J'espère que cela aidera les autres. 

8
aBrokenSniper

Étiez-vous, par hasard, sous Eclipse?

J'ai eu le même problème et j'ai remarqué que le projet n'avait pas la nature Maven. Cliquez avec le bouton droit sur le projet -> Configurer-> Convertir en projet Maven. Puis cliquez avec le bouton droit sur le projet -> Maven-> Mettre à jour le projet a résolu le problème.

0
Paul Croarkin