【问题标题】:How to read @ConfigurationProperties for different prefixes in single class如何读取单个类中不同前缀的@ConfigurationProperties
【发布时间】:2019-03-29 20:28:14
【问题描述】:

我在 github 上有 2 个不同的 application.yaml 用于 spring-boot 应用程序。以下是两者的示例内容:

first application.yaml : application: name: sample-service second application.yaml : common: kafka: topic: test

我创建了一个配置类(abc.java) with @ConfigurationProperties( prefix='common.kafka') 和 另一个配置类(xyz.java) with @ConfigurationProperties( prefix='application')

在 xyz.java 中,我继承了 abc.java。在执行 xyz.java 时,我无法访问 abc.java 的属性,从而获得 NPE。如果我保持相同的前缀层次结构,即@ConfigurationProperties(prefix='application')

简而言之,我想在单个 spring-boot 微服务类中访问 application.yaml 配置。但是,我无法实现它。 请提供访问这两个属性的任何建议。

【问题讨论】:

    标签: spring-boot spring-annotations


    【解决方案1】:

    为什么必须将一个类继承到另一个类中?

    拥有两个 @ConfigurationProperties 注释类作为属性的新类不是更好吗?

    例如

    @Component
    public class Properties {
    
        @Autowired
        ApplicationProperties applicationProperties;
    
        @Auworied
        KafkaProperties kafkaProperties;
    }
    

    只需在需要的任何地方使用您的 Properties.class

    【讨论】:

    • 我继承了它,因为它来自我们的内部库,该库被创建为在一个地方拥有所有通用配置。这个库被添加为项目的依赖项
    • @eshaingle 如前所述,您可以将它们自动连接为 2 个不同的类。这些只是 bean,你必须通过依赖注入很好地对待它们;)
    • 同意,但在库中我们不希望有 Bean 概念。它只是一个普通的图书馆
    • 好吧,在我看来,当您在库中的类上使用@ConfigurationProperties 时,您已经进入了 Bean 概念。你的问题是注解继承,请参考这个答案link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 2020-07-24
    • 2019-03-28
    • 1970-01-01
    • 2021-10-13
    • 2014-03-13
    • 2019-12-28
    相关资源
    最近更新 更多