Spring 引导:使用 @ConfigurationProperties 从 yaml 读取,不使用 @Data

Spring Boot: read from yaml using @ConfigurationProperties not working with @Data

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

KafkaConfig.java

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

Application.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/

@ComponentScan(basePackages ="PATH")

PATH:你希望它查找的包路径

@ComponentScan(basePackages ="PATH" )
@Configuration
@Import(value = {
    KafkaProducerBeans.class
})
public class AppConfig{

}

在 class KafkaConfig

上再添加一个注释 @EnableConfigurationProperties

KafkaConfig.java

@Configuration
@EnableConfigurationProperties    // new added annotation
@ConfigurationProperties("kafka")
@Data
public class KafkaConfig {
    private String topic;
    private String event;
}

我认为将属性绑定到 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文档了解更多详情: