Spring Boot - application.yml からマップを挿入する 質問する

Spring Boot - application.yml からマップを挿入する 質問する

私はスプリングブートアプリケーションは以下のとおりですapplication.yml- 基本的には以下から抜粋ここ:

info:
   build:
      artifact: ${project.artifactId}
      name: ${project.name}
      description: ${project.description}
      version: ${project.version}

特定の値を挿入することができます。例えば

@Value("${info.build.artifact}") String value

ただし、マップ全体、つまり次のようなものを挿入したいと思います。

@Value("${info}") Map<String, Object> info

それは(または似たようなことは)可能ですか? もちろん、yaml を直接ロードすることはできますが、Spring ですでにサポートされているものがあるかどうか疑問に思っていました。

ベストアンサー1

以下のソリューションは、@Andy Wilkinson のソリューションの省略形ですが、別のクラスや注釈付きメソッドを使用する必要がない点が異なります@Bean

アプリケーション.yml:

input:
  name: raja
  age: 12
  somedata:
    abcd: 1 
    bcbd: 2
    cdbd: 3

SomeComponent.java:

@Component
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "input")
class SomeComponent {

    @Value("${input.name}")
    private String name;

    @Value("${input.age}")
    private Integer age;

    private HashMap<String, Integer> somedata;

    public HashMap<String, Integer> getSomedata() {
        return somedata;
    }

    public void setSomedata(HashMap<String, Integer> somedata) {
        this.somedata = somedata;
    }

}

@Valueアノテーションと の両方を@ConfigurationProperties問題なく結合できます。ただし、ゲッターとセッターは重要であり、 が機能する@EnableConfigurationPropertiesためには必須です@ConfigurationProperties

私は、@Szymon Stepniak が提供した素晴らしいソリューションからこのアイデアを試してみました。誰かの役に立つだろうと思いました。

おすすめ記事