如果我们的应用程序中有多个属性文件,并且两个文件都设置了具有不同值的变量,该怎么办?
我们通常只是按如下所示注入值,并且它总是设法以某种方式获取值表单属性文件。怎么样?
@Configuration
public class AppConfig {
@Value("${spring.datasource.url}")
private String datasourceUrl;
答案 0 :(得分:2)
Spring读取的最后一个文件中的值将覆盖所有先前读取的值。如果您定义自己读取文件的顺序(例如,通过配置),则您将无法完全控制文件。看看下面的例子:
基于注释的配置:
@Configuration
@PropertySource({"classpath:foo.properties", "classpath:bar.properties"})
public class PropertiesWithJavaConfig {
//...
}
基于XML的配置:
<context:property-placeholder location="classpath:foo.properties,classpath:bar.properties"/>
如果bar.properties
包含也在foo.properties
中定义的属性,则bar.properties
中的值将覆盖foo.properties
中的值。
答案 1 :(得分:1)
Spring Boot has many possible sources of configuration。
关于属性文件,它先检查application.properties
,然后再检查application-<active_profile>.properties
,其中<active_profile>
由spring.profiles.active
环境变量设置(*.yaml
也是这样)文件)。
它将在以下优先级的以下目录中搜索应用以上规则的属性文件:
(在列表的上方会覆盖从较低位置加载的属性)
/config
子目录./
目录/config
包(如果使用maven,则src/main/resources/config
中的所有内容)/
(如果使用maven,则src/main/resources
中的所有内容)