加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Spring引导无法解析字符串中的占位符

发布时间:2020-12-15 04:41:40 所属栏目:Java 来源:网络整理
导读:我通过maven与mvn clean install spring-boot:run在嵌入式tomcat服务器上运行spring-boot.但每次我运行它我都会收到此错误: Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder ‘language’ in string value “${language}”
我通过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

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

这是一个令人困惑的部分:当我在没有spring-boot:run命令的情况下运行构建时,它构建正确,我可以运行构建的jar而不会出现任何问题.只有当我尝试在嵌入式tomcat服务器上运行时,我才遇到这个问题.

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

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

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

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

在此先感谢您的帮助.

解决方法

通过在< 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)不是弹簧启动应该默认读取它吗? (如上面的两个案例所示?)

谢谢大家的帮助.希望这会有助于其他人.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读