Spring Boot无法解析字符串中的占位符

我正在通过maven在嵌入式tomcat服务器上运行spring-boot mvn clean install spring-

boot:run。但是每次运行它时,都会出现此错误:

 Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'language' in string value "${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 common frames omitted

该错误与以下两行代码有关:

@Value("${language}")

private String language;

在我的application.properties中指定该语言标志,如下所示:

application.properties

language=java

logging.level.org.springframework=TRACE

当我运行不带 spring-boot:run

命令的构建时,它可以正确构建,并且我可以毫无问题地运行构建的jar。仅当我尝试在嵌入式tomcat服务器上运行时,才遇到此问题。

我可以通过在代码中执行以下操作来绕过此操作:

@Value("${language:java}")

private String language;

但这对我来说没有意义,因为应该将spring从application.properties文件中自动读取默认值。

:正如人们指出的那样,application.properties在嵌入式tomcat服务器上运行时,它根本无法读取。有什么方法可以迫使它读取文件,或者是为什么它无法读取文件的原因?当部署到外部应用服务器而不是嵌入式服务器时,它可以正常工作。

在此先感谢您的帮助。

回答:

通过将这些行添加到本<resources>节下的pom进行修复

<resource>

<directory>src/main/resources</directory>

<filtering>true</filtering>

<includes>

<include>**/*.properties</include>

</includes>

</resource>

我不完全了解这样做的必要性。

a)我可以在外部应用程序服务器上运行此程序,而无需添加此行,并且该应用程序application.properties正常运行。

b)我可以在eclipse中将应用程序作为独立的Java应用程序运行(即,无需通过maven来构建应用程序),并且它读起来application.properties就很好

c)默认情况下,spring-boot是否不应该读取它?(如上述两种情况所示?)

感谢大家的帮助。希望这对其他人有帮助。

以上是 Spring Boot无法解析字符串中的占位符 的全部内容, 来源链接: utcz.com/qa/421186.html

回到顶部