当前位置: 首页 > 知识库问答 >
问题:

Spring引导属性yaml

谷梁存
2023-03-14

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

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

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

它工作得很好,spring maps即字段group-id正确。

但是当我尝试使用相同的yaml文件手动配置Kafka(使用消费者工厂和消费者配置)时,我遇到了问题。在类中,消费者配置Kafka属性以 命名。在名称中,而不是 _ 即:

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

所以我不能把它们加载到map中,然后把map传递给ConsumerFactory,因为键是with _ 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);
    }

共有1个答案

公羊招
2023-03-14

如果您想使用yml文件中的虚线属性,您需要像引导一样对不直接支持作为引导属性的任意属性进行操作:

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

即填充属性属性。

boot为某些属性提供第一类支持的原因是,IDE编辑器可以提供内容辅助,这对于任意属性是不可能的。

 类似资料:
  • 在我的项目中有2个资源属性 1.application.properties 2. 应用开发.性能 此类使用开发的值属性 我使用 application-development.properties 作为我的项目资源 因此,我使用以下命令运行该项目: < code > mvn spring-boot:run-D spring . profiles . active = development 但是

  • 我以.jar文件的形式运行一个Spring Boot应用程序,该应用程序的一部分属性来自驻留在jar内部的application.yml,而另一部分属性则来自驻留在jar外部的另一个application.yml。外部的某些属性覆盖内部的属性。为了测试属性是否被正确覆盖,我希望看到当前活动的属性。这是完全可以实现的吗?还是唯一的解决方案是通过属性输出逻辑来扩展我的应用程序?

  • 我的应用程序正在尝试外部化所有项目属性,一些属性将位于我的应用程序中,而另一个属性将位于 Windows 中某处的文件夹中。 我将Spring设置为这样执行:-Spring . config . location = file:///C:\ Temp \ config \ application . properties,class path:application . properties 如您

  • 如何从Cloud Config服务器实例配置基本的Spring Boot属性?显然,与配置服务器相关的Spring boot属性(即cloud.config.uri,*.username,*.password)必须在bootstrap.yml中 下面的其他属性是什么:https://docs.spring.io/spring-boot/docs/current/reference/html/com

  • 应用yml在带有主类和hibernate的模块中: 主要pom: 我的模块pom: 在父项目中: 错误: