我有两个不同的环境,需要不同的属性值,并研究了使用弹簧配置文件的正确方法。因此我设置了两个不同的文件:
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
根据文档覆盖?