2017-09-05 9 views
2

application.yamlから独自のオブジェクトを取得し、それを@Valueとバインドすることは可能ですか?Springアプリケーションのプロパティからカスタムオブジェクトを取得することはできますか?

モデル:

@Data 
public class CurrencyPlan { 
    private String id; 
    private String basePrice; 
    private String merchantId; 
} 

application.yml:

plans: 
    eur: 
    id: id 
    basePrice: 5 
    merchantId: someid 

私が何をしようとしている:

@Value("${plans.eur}") CurrencyPlan eurPlan 

私は何を得る:

java.lang.IllegalArgumentException: Could not resolve placeholder 'plans.eur' in value "${plans.eur}" 

これも可能ですか?もしそうなら、それを行う方法?私はかなりのアイデアのうち、よ:(事前に

感謝;)

+1

'application.yaml'の名前を' application.yml'に変更するとどうなりますか? [doc](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html)に '.yml'拡張が記述されているので、ちょっと推測してください。 – juzraai

+0

申し訳ありませんが、それはapplication.ymlです。私は質問を作成中にタイプミスをしました –

答えて

4

あなたが@ConfigurationPropertiesを使用することができますクラスにあなたのプロパティをバインドするために探している場合。

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-typesafe-configuration-properties

@ConfigurationProperties(prefix="plans.eur")@ComponentCurrencyPlan上に配置されることになります。 @EnableConfigurationPropertiesは、好ましくは@Configurationクラスに置かれる。

CurrencyPlanクラスを従属クラスに自動配線することができます。

+0

しかし、注入する方法は、通常のオブジェクトであり、コンポーネントではないのですか?そのクラスのコンポーネントを持っていると私にはおかしなことがあるようです。 –

+0

あなたは春に管理されないという意味ですか?いいえ。コンポーネントのアスペクトを削除するには、 '@ EnableConfigurationProperties'アノテーションについて話し始めるときにドキュメントからセクションを読んでくださいが、これを行うには常にスプリングマネージドBeanです。 –

+1

さて、私はもう少し考えを与え、このソリューションは私が探していたものです、ありがとう:) –

関連する問題