根据我的环境,我有应用程序文件:application.yml
和application-uat.yml
。我通过提供SPRING_PROFILES_ACTIVE
作为环境变量来运行应用程序,以便选择正确的文件。我在应用程序内部定义其他配置文件时遇到问题。
假设我有一个配置文件为mock-rest
的bean可以模拟其余客户端,而我有一个配置文件为actual-rest
的bean。
我已经尝试过两种方法:
#inside application.yml
spring:
profiles:
include: mock-rest
对于UAT
:
#inside application-uat.yml
spring:
profiles:
include: actual-rest
但是问题是spring将同时包含两个配置文件,因为它同时使用了两个文件,并且仅替换了uat
yml文件中的值。
如果我尝试在spring.profiles.active
文件中使用yml
,Spring将忽略它,因为SPRING_PROFILES_ACTIVE
环境变量将具有优先级。
所以,问题是解决上述问题的方法是什么?基本上,我需要在application.yml
文件中定义配置文件,并且只想将环境定义为我的SPRING_PROFILES_ACTIVE
env变量。这可能吗?如果没有,我应该考虑什么选择?
答案 0 :(得分:0)
将读取application.yml
文件。这是一种缩进的行为。通常,application.yml
中的所有值都会被其他更具体的application-*.yml
覆盖。
但是配置文件不是一个单一的值,您可以同时启用多个值,因此我不会忽略配置文件,而是将两者累加。
如果要在生产环境中摆脱mock-rest
,则可能要从mock-rest
删除application.yml
配置文件,并将其移至您要使用的新application-mock.yml
可以使用环境变量激活。
application.yml
# some default configuration
application-mock.yml
spring:
profiles:
include: actual-rest
application-uat.yml
spring:
profiles:
include: actual-rest