spring - Spring Boot 属性 yaml
问题描述
我使用自动配置(仅通过注释)运行 spring boot 和 kafka,并在 .yaml 文件中定义了道具,即:
spring:
kafka:
bootstrap-servers: someserver:9999
consumer:
group-id: mygroup
....
@KafkaListener()
public void receive(ConsumerRecord<?, ?> consumerRecord) {
....
}
它工作正常,弹簧映射,即正确的字段组ID。
但是当我尝试使用相同的yaml文件手动配置kafka(使用ConsumerFactory和ConsumerConfig)时,我遇到了问题。在类 ConsumerConfig 中,kafka 属性以 . 名义上,而不是_即:
public static final String GROUP_ID_CONFIG = "group.id";
所以我不能只是将它们加载到地图中并将地图传递给 ConsumerFactory 因为键与 _ not 。
我不想像 spring kafka 团队提供的示例中所示的那样丑陋,当他们将 yaml 中的道具映射到配置类中,然后在映射中手动分配道具以传递给工厂时:
@ConfigurationProperties(prefix = "kafka")
public class ConfigProperties {
private String brokerAddress;
private String topic;
private String fooTopic;
public String getBrokerAddress() {
return this.brokerAddress;
}
.....
@Bean
public ProducerFactory<String, String> producerFactory() {
Map<String, Object> props = new HashMap<>();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, this.configProperties.getBrokerAddress());
.....
return new DefaultKafkaProducerFactory<>(props);
}
解决方案
如果要使用 yml 文件中的点属性,则需要像 boot 对不直接支持作为引导属性的任意属性执行此操作:
spring:
kafka:
consumer:
properties:
group.id: foo
即填充Properties
属性。
boot 为某些属性提供一流支持的原因是,IDE 编辑器可以提供内容辅助,这对于任意属性是不可能的。
推荐阅读
- angular - FormData.append 的参数 2 不是 mozila firefox 中的对象
- scala - 重载函数 createDirectStream 的类型参数数量错误
- sql - 我有整月的工作记录,想在 SQL 中显示工作日期的数量
- scala - sbt.ResolveException:未解决的依赖项:org.scalamacros#scalac-plugin_2.12.3;2.0.0-96-9f738df2
- php - 致命错误:未捕获的错误:找不到类“Google_Client”
- java - Swagger UI 不适用于 JSON 配置
- java - Cloudant / CouchDB 通过 Java 客户端(API)向现有设计文档添加新视图
- javascript - 如何在jsp中显示下拉框的值
- android - Genymotion 无法实例化服务 com.google.android.gms.measurement.AppMeasurementService
- angular - angular 5 ngModelOptions updateOn 多桩事件