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文档了解更多详情:
- https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config.typesafe-configuration-properties.java-bean-binding
- https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config.typesafe-configuration-properties.enabling-annotated-types
我正在尝试从 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文档了解更多详情:
- https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config.typesafe-configuration-properties.java-bean-binding
- https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config.typesafe-configuration-properties.enabling-annotated-types