如何在春季启动中选择配置文件

时间:2018-12-03 10:26:20

标签: java spring spring-boot

根据我的环境,我有应用程序文件:application.ymlapplication-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变量。这可能吗?如果没有,我应该考虑什么选择?

1 个答案:

答案 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