web-dev-qa-db-ja.com

Spring Bootは文字列のプレースホルダーを解決できませんでした

mvn clean install spring-boot:runでmavenを介して組み込みTomcatサーバーでspring-bootを実行しています。しかし、実行するたびにこのエラーが発生します。

原因:Java.lang.IllegalArgumentException:org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.Java:174)〜[spring-core-4.3。の文字列値 "$ {language}"のプレースホルダー 'language'を解決できませんでした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] org.springframework.beans.factory.support.AbstでractBeanFactory.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. org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.Java:585)〜[spring-beans-4.3.6.RELEASE.jar:4.3の6.RELEASE.jar:4.3.6.RELEASE] .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個の共通フレームが省略されました

このエラーは、次の2行のコードに関するものです。

@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ファイルからデフォルト値を自動的に読み取ることになっているため、これは意味がありません。

[〜#〜] edit [〜#〜]:人々が指摘したように、組み込みTomcatサーバーで実行するとき、application.propertiesをまったく読み取っていません。ファイルを強制的に読み取る方法や、ファイルを読み取れない理由はありますか?組み込みのサーバーではなく、外部のアプリサーバーに展開すると正常に機能します。

よろしくお願いします。

7
Karan

これらの行を<resources>セクションの下のpomに追加することで修正されました

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

私が完全に理解していないのは、これを行う必要があるということです。

a)この行を追加せずに外部アプリサーバーでこれを実行でき、アプリはapplication.propertiesを正常に読み取ります。

b)アプリケーションをスタンドアロンのJava Eclipseのアプリケーションとして実行できます(つまり、Mavenを介してアプリをビルドする必要はありません)、読み取りはapplication.propertiesです)

c)スプリングブートはデフォルトでそれを読み取ることになっていますか? (上記の2つのケースで示されているように?)

皆、助けてくれてありがとう。これが他の人の助けになることを願っています。

13
Karan

たまたま、これをEclipseから実行していましたか?

私は同じ問題を抱えていて、プロジェクトにはMavenの性質がないことに気付きました。プロジェクトを右クリック->構成-> Mavenプロジェクトに変換。次に、プロジェクトを右クリック-> Maven-> Update Projectで問題を解決しました。

1
Paul Croarkin