我有一个多文档配置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
---
假设配置文件abc
和def
使用kafka消费者,但配置文件xyz
没有。是否有一种方法可以抽象abc
和def
中使用的常见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
添加它。
我也考虑过创建一个新的配置文件,并包括它,当我调用abc
和def
,以结合配置(spring.profiles.active=abc,kafka,stage
),但这对我来说似乎是多余的,因为abc
和def
将无法工作,没有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)
这个方法将:
- 避免配置文件
abc
和def
之间的配置重复。配置文件xyz
中不存在Kafka配置 - 我仍然启动我的应用程序只有一个配置文件:
java -Dspring.profiles.active=abc -jar myapp.jar