@PropertySource
注解用来增加 PropertySource
到 Spring 的 Environment
中。和 @Configuration
注解结合使用。
使用例子
给一个指定文件 app.properties
包含一个键值对 bean.name=java.lang.String
。@PropertySource
会把 app.properties
放入到 Environment
里。
@Configuration
@PropertySource("classpath:/app.properties")
public class AccountConfig {
@Autowired
Environment env;
@Bean
public People people() {
System.out.println("===================");
String[] defaultProfiles = env.getDefaultProfiles();
Arrays.stream(defaultProfiles).forEach(System.out::println);
System.out.println(env.getProperty("bean.name"));
return new People();
}
}
解析带有占位符
@Configuration
@PropertySource("classpath:/${my.placheholder:app}.properties")
public class AccountConfig {
@Autowired
Environment env;
@Bean
public People people() {
System.out.println("===================");
String[] defaultProfiles = env.getDefaultProfiles();
Arrays.stream(defaultProfiles).forEach(System.out::println);
System.out.println(env.getProperty("bean.name"));
return new People();
}
}
如果占位符 my.placheholder
已经注册到 Environment
,那么占位符将被解析成对应的值。如果没有找到对应值,那么将会使用默认值 app
。
覆盖
如果有多个 .property
的文件,并且每个文件都包含相同的键名,那么存在覆写。
@Configuration
@PropertySource("classpath:/com/myco/a.properties")
public class ConfigA {
}
@Configuration
@PropertySource("classpath:/com/myco/b.properties")
public class ConfigB {
}