Spring Boot:减少多文档yml文件中的配置重复



我有一个多文档配置yml文件,它根据活动的spring配置文件激活某些配置,如下所示:

# some common config
---
spring.config.activate.on-profile: abc & stage
# specific config for service abc in stage env
---
spring.config.activate.on-profile: def & stage
# specific config for service def in stage env
---
spring.config.activate.on-profile: xyz & stage
# specific config for service xyz in stage env
---

假设配置文件abcdef使用kafka消费者,但配置文件xyz没有。是否有一种方法可以抽象abcdef中使用的常见kafka配置并稍后在两者中引用它?像这样:

# some common config
---
some.label: kafka
# common kafka config
---
spring.config.activate.on-profile: abc & stage
include kafka
# specific config for service abc in stage env
---
spring.config.activate.on-profile: def & stage
include kafka
# specific config for service def in stage env
---
spring.config.activate.on-profile: xyz & stage
# specific config for service xyz in stage env
---

我知道我可以在"common config"中添加通用kafka配置。部分,但这也会为不需要它的配置文件xyz添加它。

我也考虑过创建一个新的配置文件,并包括它,当我调用abcdef,以结合配置(spring.profiles.active=abc,kafka,stage),但这对我来说似乎是多余的,因为abcdef将无法工作,没有kafka配置-传递两个配置文件,以获得一个功能似乎有问题…

还有其他方法吗?

注意:我的项目使用Spring Boot 2.5.2版本

似乎可以使用配置文件组。我需要创建一个单独的kafka配置,然后将其分组到所需的配置文件,如下所示:

# my common-to-all profiles config
---
spring.profiles: kafka
# my kafka config
---
spring.profiles: abc
spring.profiles.group.abc[0]: kafka
# my abc AND kafka config
---
spring.profiles: def
spring.profiles.group.def[0]: kafka
# my def AND kafka config
---
spring.profiles: xyz
# my xyz config (no kafka included)

这个方法将:

  1. 避免配置文件abcdef之间的配置重复。配置文件xyz
  2. 中不存在Kafka配置
  3. 我仍然启动我的应用程序只有一个配置文件:java -Dspring.profiles.active=abc -jar myapp.jar

最新更新