首页 > 解决方案 > 在 spring-boot application.yaml 中从其他地方引用配置部分

问题描述

我正在配置 spring boot kafka 流application.yaml。我需要配置输出主题的属性:

producer:
  topic.properties:
    cleanup.policy: compact
    retention.ms: 604800000

因为我在整个文件中具有相同的配置,所以我想在哪里定义值:

my:
 policy: compact
 retention: 604800000
producer:
  topic.properties:
    cleanup.policy: ${my.policy}
    retention.ms: ${my.retention}

但这topic.properties只是传递给底层 kafka 库的通用映射。为了使配置更加灵活,我想参考my. producer.topic.properties因此,当添加新的 kafka 属性时,只会my更新部分。

我试过了:

producer:
  topic.properties: ${my}

但这不起作用 -${my}被替换my.toString()并且配置在获取预期 Map 的字符串时失败。

我正在寻找一些部分占位符。例如,在 OpenAPI Spec 中,您可以执行以下操作:

my:
 policy: compact
 retention: 604800000
producer:
  topic.properties:
     $ref: '/my'

我知道基本的 YAML 不支持引用。但是spring-boot允许引用其他配置部分有什么好处吗?

标签: spring-bootspring-boot-configuration

解决方案


您可以引用其他属性,但一次一个:

my:
 policy: compact
 retention: 604800000
producer:
  topic.properties:
     policy: ${my.policy}
     retention: ${my.retention}

推荐阅读