web-dev-qa-db-ja.com

Spring Boot:YAMLファイルから@Valueをロード

アプリケーションがファイルを読み取ることができるフォルダーへのパスを含む.ymlファイルからプロパティをロードする必要があります。

次のコードを使用してプロパティを注入しています。

@Value("${files.upload.baseDir}")
private String pathToFileFolder;

開発用の.ymlファイルはsrc/main/resources/config/application.ymlの下にあり、本番環境で次のコマンドを使用してアプリケーションを実行し、開発設定をオーバーライドします。

Java -jar app.jar --spring.config.location=/path/to/application-production.yml

Spring Bootのドキュメントには次のように書かれています。

SpringApplicationは、次の場所にあるapplication.propertiesファイルからプロパティをロードし、それらをSpring環境に追加します。

  1. 現在のディレクトリの/ configサブディレクトリ。

  2. 現在のディレクトリ

  3. クラスパス/ configパッケージ

  4. クラスパスのルート

と同様:

'.properties'の代わりにYAML( '.yml')ファイルを使用することもできます。

.ymlファイルには次が含まれます。

{...}
files:
      upload:
        baseDir: /Users/Thomas/Code/IdeaProjects/project1/files
{...}

そして、私のApplicationクラスには以下のアノテーションが付けられています:

@SpringBootApplication
@EnableCaching

アプリケーションを実行すると、例外が発生します。

Caused by: Java.lang.IllegalArgumentException: Could not resolve placeholder 'files.upload.baseDir' in string value "${files.upload.baseDir}"

Spring Bootで.ymlのサポートを有効にするには、YamlPropertySourceLoaderクラスを使用するか、特別な注釈を追加する必要がありますか?

編集:.ymlファイルには、dataSource.XXXhibernate.XXXなど、Spring Bootによって正常にロードされる他のプロパティがいくつか含まれています。

24
Thomas Schmidt

M. Deinumは正しい、私が提供したセットアップは機能している-ymlファイルのインデントが間違っていたため、プロパティが見つからなかった。

5
Thomas Schmidt

私にとっては、プロパティファイルの重複キーがこれを引き起こしました...

大きなymlファイルで同じキーを知らずに使用しました。

key:   
 key1: value
 key2: value

key:  
 key3: value
1
SatyaRajC