在Spring Boot中使用无法解释的行为:使用配置文件

时间:2015-10-13 00:43:48

标签: java spring spring-boot

我有两个不同的环境,需要不同的属性值,并研究了使用弹簧配置文件的正确方法。因此我设置了两个不同的文件:

application.properties 
application-dev.properties

设置运行时环境并包含以下内容:

spring.profiles.active=dev 

在application.properties文件中包含一个属性" foo.bar"设置在哪里:

foo.bar=defaultProp 
application-dev.properties文件中的

foo.bar=devProp 

在应用程序内部包含以下代码:

@Value("${foo.bar}")
String foobar;

@Autowired 
Environment env;

当我使用以下内容运行应用程序时:

String x = env.getProperty("spring.profiles.active");

x报告" dev"的值(按预期工作)

BUT

foobar将其值报告为" defaultProp"

applications.properties和applications-dev.properties都位于同一目录中。

后来包括以下内容用于测试:

for(String s: env.getActiveProfiles())
{
   logger.info("Act:" + s);
}
for(String s: env.getDefaultProfiles())
{
   logger.info("Def:" + s);
}

使用以下输出:

 Act:dev
 Def:default

这也是预期的,似乎正在发挥作用

最后,另一个变量被插入到application-dev.properties

ding=dong

在应用程序中,以下代码已连接到

@Value("${ding}")
String dingvalue;

低,看看" dingvalue"报告为" dong"再次按预期工作 - 正在从application-dev.properties文件中获取值!

因此,似乎活动配置文件实际上被设置为" dev"和价值正如预期的那样被提升。

最后,根据doc.spring.io:

  

23.4特定于配置文件的属性

     

除了application.properties文件外,还有特定于配置文件   也可以使用命名约定来定义属性   应用程序 - {轮廓}的.properties。

     

配置文件特定属性从与之相同的位置加载   标准的application.properties,始终包含特定于配置文件的文件   无论是否重写默认值   特定于配置文件的文件位于打包的jar内部或外部。

任何人都可以解释为什么application.properties值不会被application-dev.properties根据文档覆盖?

1 个答案:

答案 0 :(得分:0)

正在按预期工作。
/product-model-configuration/src/main/resources/product-model.yml: foo: bar: defaultProp /product-model-configuration/src/main/resources/product-model-loc-isolated.yml: foo: bar: bar enter image description here