Spring 配置文件包含 yaml 文件的问题

Spring Profile include issue with yaml file

当团队将 websphere 配置文件设置为活动状态时,我正在努力实现云配置文件也被激活。

yaml 文件

   ---
    spring:
      application:
        name: kicapp
      output:
        ansi:
          enabled: ALWAYS
      profiles:
        active: local
    #server:
      #context-path: /
      #port: 8080
    #logging:
      #level:
        #org.springframework.security: DEBUG
    ---
    spring:
      profiles: local
    ---
    spring:
      profiles: unittest
    ---
    spring:
      profiles: cloud
      test: loaded
    ---
    spring:
      profiles: websphere
        include: cloud

当我设置 --spring.profiles.active=websphere 时,我收到以下错误

Caused by: mapping values are not allowed here in 'reader', line 28, column 12: include: cloud

这似乎是 SnakeYAML 解析器和 Spring Boot 使用它的方式的限制。由于 yaml 允许使用 --- 分隔符在单个文件中指定多个不同的文档,因此 Spring 分隔单独文档的方式是通过 spring.profiles 键,此键应为不幸的是,结构简单而不是复杂的结构。

一个好的解决方法实际上是以这种方式将其拆分为多个文件:

application.yaml有共同的内容, application-<profile> 具有特定于配置文件的扩展,此结构就位键 spring.profiles.include 将按预期工作。

根据 Biju 的回答,如果您想保留带有 --- 分隔符的单个文件而不使用单独的配置文件,您可以按如下方式定义 spring.profiles.include 键:

---
spring:
  profiles: currentProfile
  profiles.include: profileToInclude

这样它就不是一个复杂的结构来解析并且两个键都存在。