2017-09-05 58 views
2

是否有可能从application.yaml获取自己的对象并将其与@Value绑定到我的组件?是否可以从弹簧应用程序属性获取自定义对象?

型号:

@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")@Component将被放置在CurrencyPlan@EnableConfigurationProperties最好放在@Configuration类别上。

在您可以将CurrencyPlan类自动装入依赖类后。

+0

但是有没有一种注入方式就像普通对象而不是组件?看起来很奇怪我有这样的类作为组件 –

+0

你的意思是不是由春天管理?不可以。如果您在开始讨论'@ EnableConfigurationProperties'注释时阅读文档中的部分,则可以删除组件方面,但它始终是一个弹簧管理bean来执行此操作。 –

+1

好吧,我给了它更多的想法,这个解决方案是我一直在寻找的,谢谢:) –

相关问题