【问题标题】:Is it possible to get custom object from spring application properties?是否可以从 Spring 应用程序属性中获取自定义对象?
【发布时间】:2017-09-05 12:33:57
【问题描述】:

是否可以从 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}"

这甚至可能吗?如果是这样,该怎么做?我很没有想法:(

提前致谢 ;)

【问题讨论】:

  • 如果将application.yaml 重命名为application.yml 会怎样?只是猜测,因为doc 提到了.yml 扩展。
  • 对不起,它是 application.yml,我在创建问题时打错了

标签: java spring spring-boot


【解决方案1】:

如果您希望将您的属性绑定到一个类,您可以使用@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 类自动装配到依赖类之后。

【讨论】:

  • 但是有没有办法注入就像一个普通的对象而不是一个组件?将这种类作为组件对我来说似乎很奇怪
  • 你的意思是不用spring管理?不。如果您在文档开始谈论 @EnableConfigurationProperties 注释时阅读该部分,则可以删除组件方面,但它始终是一个 Spring 托管 bean 来执行此操作。
  • 好的,我想多了,这个解决方案正是我一直在寻找的,谢谢 :)
猜你喜欢
  • 2022-08-08
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 2011-06-08
  • 1970-01-01
相关资源
最近更新 更多