1.单个获取
1.1.通过Environment读取
配置文件
test:
user:
name: eden
age: 18
penName:
email: 163.com
fans: eat,sport,read
调用
@Autowired
Environment environment;
@Test
public void readByEnvironment(){
System.out.println(environment.getProperty("test.user.email"));
}
1.2.通过@value读取
配置文件
test:
user:
name: eden
age: 18
penName:
email: 163.com
fans: eat,sport,read
调用
@Value("${test.user.name}") //读取配置文件
private String name;
@Value("${test.user.penName:大地瓜的豆}") //设置默认值,配置里读取不到就用默认值
private String penName;
@Value("${test.user.email:#{null}}") // 默认值设为null
private String email;
@Value("${test.user.fans}") //可用数组或集合接收配置里的数组类型
private List<String> fans;
@Test
public void readByValues(){
System.out.println("name:"+name);
System.out.println("penName:"+penName);
System.out.println("email:"+email);
for (String fan : fans) {
System.out.println("fan:"+fan);
}
}
2.全部获取
通过Environment和@Value 都是单个获取,如果要读取多个属性,可以用@ConfigurationProperties。
注意:
1.必须要有get,set
2.要结合@Component或 @Configuration表示交给spring容器处理,或者在启动类加上@EnableConfigurationProperties(GetConfiguration2.class)
3.从spring容器里的获取的对象才有属性值,不要自己new对象
bean
@Component
@ConfigurationProperties(prefix = "test.user")
@Data
public class GetConfiguration2 {
private String name;
private Integer age;
}
调用
@Autowired
GetConfiguration2 getConfiguration2;
@Test
public void readByConfigurationProperties(){
System.out.println(getConfiguration2.getName()+"--"+getConfiguration2.getAge());
}
3.指定文件获取
上面读取配置文件的方法(Environment、@Value、@ConfigurationProperties),会读取跟目录下所有的配置文件,如果存在同样的 key 值,最后一个处理的会覆盖前面的
最好指定要读取的配置文件@PropertySource(“classpath:文件名”)
4.@value扩展
// 赋予默认值
@Value("chinese")
private String language;
// 获取系统参数
@Value("#{systemProperties['os.name']}")
private String systemPropertiesName;
// 表达式计算
@Value("#{ T(java.lang.Math).random() * 100 }")
private double randomNumber;
// 获取其他bean的属性(其它bean定义见下面)
@Value("#{otherBean.game}")
private String game;
// 指定分隔符拆分
@Value("#{'${test.user.fans}'.split('a')}")
private List<String> numList;
// 获取资源
@Value("classpath:application.yml")
private Resource resourceFile;
// 获取连接
@Value("http://www.choupangxia.com")
private URL homePage;
// #{}通过?:赋予默认值
@Value("#{systemProperties['port']?:'8888'}")
private String port;
@Service
public class OtherBean {
@Value("部落冲突")
private String game;
public String getGame() {
return game;
}
}