有时我们需要从 yml
配置文件中获取数据和值,假设现在是一个 Springboot 项目,下面分享怎样从 yml
文件中读取基本数据类型、数组、集合、Map 以及单独一个对象 bean 的值。
以上可以分成两组,基本数据类型、数组和剩下其他,因为基本数据类型和数组的值都能通过注解@Value
形式直接读取出来。
一、基本数据类型、数组
1、.pom
文件添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
2、.yml
配置数据
all-custom-data:
includes: 数组元素1,数组元素2
basic-string: 字符串
basic-int: 100
basic-float: 100f
basic-double: 100.00
3、创建一个测试用例,使用如下代码获取
@RunWith(SpringRunner.class)
@SpringBootTest
public class LianxingProtocolApplicationTests {
@Value("${all-custom-data.includes}")
private String[] includes;
@Value("${all-custom-data.basic-string}")
private String basicString;
@Value("${all-custom-data.basic-int}")
private int basicInt;
@Value("${all-custom-data.basic-float}")
private float basicFloat;
@Value("${all-custom-data.basic-double}")
private double basicDouble;
@Test
public void propsTest() throws JsonProcessingException {
System.out.println("==1==="+ Arrays.toString(includes));
System.out.println("==2==="+ basicString);
System.out.println("==3==="+ basicInt);
System.out.println("==4==="+ basicFloat);
System.out.println("==5==="+ basicDouble);
}
}
控制台打印结果如下:
==1===[数组元素1, 数组元素2]
==2===字符串
==3===100
==4===100.0
==5===100.0
所以上面的数据都能用注解很简单的获取。
集合
集合的数据不能用@Value
获取,比如现在 .yml
中有这样一个集合。
all-custom-data:
listData:
- 集合元素2
- 集合元素2
创建一个配置类,记得带上注解,需要使用时,调用里面定义的方法。
@Component
@ConfigurationProperties(prefix="all-custom-data") public class MyProps { private List<String> listData = new ArrayList<>(); public List<String> getListData() { return listData; } }
再来看 Map 数据
all-custom-data:
mapData:
key1: value1
key2: value2
配置类中代码是这样的
private Map<String, String> mapData = new HashMap<>(); //接收 mapData 里面的属性值
//创建对应属性值的 Get 方法
public Map<String, String> getMapData() {
return mapData;
}
对象
如果要在 .yml
中创建一个对象,然后在代码中使用,其实和前面差不多。
custom-user:
name: 张三
age: 14
sex: 1
创建一个 bean 来接收配置信息,记得属性名和配置文件中一致,而且添加 Get 、Set 方法。
@Component
@ConfigurationProperties(prefix="custom-user")
public class CustomUser {
private String name;
private int age;
private int sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
@Override
public String toString() {
return "CustomUser{" +
"name='" + name + '\'' +
", age=" + age +
", sex=" + sex +
'}';
}
}
使用时只要自动注入就行
@Autowired
private CustomUser customUser;
System.out.println("====="+ customUser.toString());
ok,基本就这些。
本文由老郭种树原创,转载请注明:https://guozh.net/springboot-reads-the-attribute-value-in-the-configuration-file/