春季靴子性能yaml

时间:2018-11-09 18:15:33

标签: spring spring-boot yaml spring-kafka

我使用自动配置(仅通过注释)运行spring boot和kafka,并在.yaml文件中定义了道具,即:

spring:
  kafka:
    bootstrap-servers: someserver:9999
    consumer:
      group-id: mygroup
....

 @KafkaListener()
  public void receive(ConsumerRecord<?, ?> consumerRecord) {
....
  }

它可以正常工作,弹簧映射,即字段group-id正确。

但是当我尝试使用相同的yaml文件手动配置kafka(与ConsumerFactory和ConsumerConfig一起使用)时,我遇到了问题。 在类ConsumerConfig中,kafka属性以命名。而不是_即:

public static final String GROUP_ID_CONFIG = "group.id";

所以我不能只将它们加载到map中并将该map传递给ConsumerFactory,因为键带有_ not。

我不想像春季kafka团队所提供的示例那样丑陋,当他们将yaml中的道具映射到config类,然后在地图中手动分配要传递给工厂的道具时:

@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);
    }

1 个答案:

答案 0 :(得分:0)

如果要使用yml文件中的点分属性,则需要像boot那样对不直接作为启动属性支持的任意属性进行启动:

spring:
  kafka:
    consumer:
      properties:
        group.id: foo

即填充Properties属性。

引导为某些属性提供一流支持的原因是,IDE编辑器可以提供内容辅助,而任意属性则无法实现。

相关问题