首页 > 解决方案 > Spring Boot:使用 @ConfigurationProperties 从 yaml 读取不与 @Data 一起使用

问题描述

我正在尝试从 application.yml 中检索值。下面的最后一行将 kafkaConfig 显示为 null,并且无法读取。如何正确设置 Kafka 配置和代码,以从 json 文件中读取?我们使用 @Data 而不是 getter/setter。

KafkaConfig.java

@Configuration
@ConfigurationProperties("kafka")
@Data
public class KafkaConfig {
    private String topic;
    private String event;
}

应用程序.yml

kafka:
  topic: "testTopic"
  event: "testEvent"

KafkaProducerBeans.java

@Component
public class KafkaProducerBeans {

    @Autowired
    private KafkaConfig kafkaConfig;

    public KafkaProducerBeans(KafkaConfig kafkaConfig) {
        this.kafkaConfig = kafkaConfig;
    }

    @Bean(name = "kafkaTestClient")
    public String getData() {
        return kafkaConfig.getTopic();  // final line is creating null for kafka Config
    }

资源:https ://codingnconcepts.com/spring-boot/spring-configuration-properties-using-yml/

标签: javaspring-bootjavabeansspring-kafka

解决方案


我认为将属性绑定到 pojos 的推荐方法是@EnableConfigurationProperties像这样使用注释:

KafkaConfig.java

@ConfigurationProperties("kafka")
@Data
public class KafkaConfig {
    private String topic;
    private String event;
}

KafkaProducerBeans.java

@Component
@EnableConfigurationProperties(KafkaConfig.class)
public class KafkaProducerBeans {

    private final KafkaConfig kafkaConfig;

    @Autowired
    public KafkaProducerBeans(KafkaConfig kafkaConfig) {
        this.kafkaConfig = kafkaConfig;
    }

    // [...]
}

有关详细信息,请参阅官方 Spring 文档:


推荐阅读