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
这样它就不是一个复杂的结构来解析并且两个键都存在。
当团队将 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
这样它就不是一个复杂的结构来解析并且两个键都存在。