spring.cloud.function.definition 的 application.yml 中的多行值

mar*_*den 4 spring-boot spring-cloud-stream

我们有一个使用已弃用的 @StreamListener 的 Spring boot 项目,现在我们正在切换到 Spring Cloud Stream 功能性 kafka 绑定器。

问题是这个服务连接到多个kafka主题并且我们的单线spring.cloud.function.definition: topicA;topicB;topicC;...;topicN变得很长

我想知道如何在 Spring 的application.yaml上使用yaml 功能,例如多行值(例如 | 或 > 运算符),但我在文档中没有找到类似的内容。

我的目标是这样的

spring.cloud.function.definition: | topicA;
                                    topicB;
                                    topicC;
                                    ...;
                                    topicN
Run Code Online (Sandbox Code Playgroud)

谢谢

Ale*_*lex 5

在 YAML 中表示多行值的方法有多种。详细信息可以在如何在 YAML 中将字符串拆分为多行?其中大多数都受 Spring 支持并且可以在application.yml.

在 Spring Cloud Stream 中使用多行函数定义

所有上述方法都适用于 Spring,但最终它实际上取决于结果值的使用方式。在某些情况下,新行字符会被保留,在某些情况下会被替换为空格。

据我所知,在org.springframework.cloud.stream.function.FunctionConfigurationspring.cloud.function.definition中进行了解析,并且逻辑不需要任何空格。

在这种情况下唯一有效的方法是双引号块并转义换行符

spring.cloud.function.definition: "topicA;topicB;topicC;\
  ...;topicN"
Run Code Online (Sandbox Code Playgroud)

  • 你好@Alex,我们使用的是 Spring boot 2.6.6 和 Spring Cloud Stream 2021.0.1。Spring Cloud Stream 上的“;”和“|”分隔符之间存在差异。第一个仅列出不相关的绑定,第二个允许绑定组合(就像我们在 Linux 终端上使用管道一样)。长字符串的问题正是与这个特定的 Spring 属性有关,因此我认为限制来自 Spring 而不是来自 yaml 功能。 (2认同)