我正在使用Maven通过mvn clean install spring-boot:run
命令在嵌入式Tomcat服务器上运行Spring Boot。但每次运行时,我都会遇到以下错误:
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
Translated:
That language flag is specified in my application.properties like this:
application.properties
language=java
logging.level.org.springframework=TRACE
这是令人困惑的部分:当我不使用spring-boot:run命令运行构建时,它可以成功构建,我可以毫无问题地运行构建的jar文件。只有当我尝试在嵌入的Tomcat服务器上运行时才会遇到此问题。
我可以通过在我的代码中这样做来绕过这个问题:
@Value("${language:java}")
private String language;
但是这对我来说没有意义,因为春季应该自动从application.properties
文件中读取默认值。
编辑:如一些人所指出的那样,在内嵌式tomcat服务器上运行时根本没有读取application.properties
。 有没有办法强制它去读取文件,或者可能不读取文件的原因? 在部署到外部应用程序服务器而不是嵌入式服务器时,它可以正常工作。
logging.file.name=${log_dir}
,而在Liberty server.env文件中设置了log_dir=C:\mydir"。如果我在Liberty服务器上运行它,我会得到相同的错误。我发现唯一解决它的方法是在我的*application.properties*中硬编码设置,如
logging.file.name=C:\mydir```。但这当然不是最好的解决方案。 - pixel