首先,如果您单独定义配置文件(profile:dev)并再次将其与其他配置文件结合(再次与移动设备结合,我的意思是 dev & mobile)。这不会给您任何例外,但您的组合个人资料不会被选中。
文档说,我们可以将配置文件与符号 & | 结合起来。和其他符号please refer docs,我们可以进行任何复杂的组合。但是,我不建议您单独定义配置文件并将其与其他配置文件结合起来,例如在单独定义 dev 配置文件之后将 dev & mobile 组合在一起。
以下示例显示,它是如何工作的?
application.yaml
creds:
first: default value
---
spring:
profiles: dev
creds:
first: dev value
---
spring:
profiles: mobile
creds:
first: mobile val
---
spring:
profiles: dev & mobile
creds:
first: dev-mobile value
如果我们单独定义一个配置文件并将其与其他配置文件结合起来会发生什么?(就像您所做的那样)。
在这个 application.yml 文件中,我定义了 dev、mobile 和组合配置文件(dev & mobile),并且我们知道还有一个默认配置文件。
如我们所知,如果我不调用任何配置文件,它将选择默认配置文件。例如,如果我们正在读取这样的属性:
@Value("${creds.first}")
String value;
属性值:默认值
如果 --spring.profiles.active=dev ,那么它将选择 dev 配置文件。
财产价值:开发价值
如果 --spring.profiles.active=mobile ,那么它将选择 mobile 配置文件。
属性值:移动价值
如果 --spring.profiles.active=mobile,dev ,那么在这里,我们试图同时调用两个配置文件,理想情况下,我们希望应该选择组合配置文件。但它不会被选中。因为,我们已经定义了单独的配置文件(profile: dev 和 profile: mobile 分别),首先,它会从 mobile 配置文件中读取属性和然后它从 dev 配置文件中读取属性,如果找到,然后它会使用 dev 配置文件中的属性值覆盖。如果未找到,它将仅保留 mobile 配置文件的属性值。我的意思是说,它的意思是
财产价值:开发价值
如果--spring.profiles.active=dev,mobile,那么这里,它首先从dev配置文件中读取属性值,然后,再次查找mobile 配置文件中的属性(如果找到)会覆盖该值。如果没有找到,它将只坚持 dev 配置文件的属性值。
这就是它不会读取组合配置文件(开发和移动)的原因。
如何以及何时读取组合配置文件?
根据文档,如果提到的配置文件不应该在其他地方单独定义,它可以选择一个组合配置文件:
示例:application.yaml
creds:
first: default value
---
spring:
profiles: showcase
creds:
first: showcase value
---
spring:
profiles: dev & mobile
creds:
first: dev-mobile value
在这里,dev、mobile 使用 & 组合在一起,它们没有在其他地方单独定义。
所以,现在如果我们调用 --spring.profiles.active=dev,mobile,它将选择组合的配置文件值
资产价值:开发-移动价值
最后,如果 --spring.profiles.active=dev 或 --spring.profiles.active=mobile,它不会选择组合配置文件。所以,默认配置文件会生病。
属性值:默认值
示例:https://github.com/donthadineshkumar/multi-profile-document.git