「这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战」。
上一篇我们了解了YAML的作用和它的基本的语法,这次我们来说一下YAML配置文件的获取,顺便也说一下Properties配置文件值的获取
YAML配置文件值的获取
我们先建立在包内建立一个Person.java文件,把我们想要的用的值敲进入
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object>lists;
private Dog dog;
这其中包含字符串、整数、布尔值、map、list,还有一个dog,所以我们要建立一个Dog文件
private String name;
private Integer age;
我们定义两个属性值
然后加入Getter and Setter方法和toString方法(这里说一下,被“private”的变量即被私有化的变量,其他类的文件就不能引用它。set和get是“public”共有的,也就是说这两个方法是可以被在其他类文件中使用的。外界想要改变已经“private”私有化的变量,必须要在其他类文件中给方法set一个参数,通过set变量来更改。get则是获取这个私有化的变量值。是定义了一个带返回类型的方法,这个返回类型就是已经被私有化变量的类型。toString()方法返回反映这个对象的字符串。因为toString方法是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”)
具体快捷操作是alt+insert,然后分别选择Getter and Setter和toString,选择全部变量,然后会自动导入代码
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
然后我们在Person文件中也加入Getter and Setter和toString方法
@Override
public String toString() {
return "Person{" +
"lastName='" + lastName + '\'' +
", age=" + age +
", boss=" + boss +
", birth=" + birth +
", maps=" + maps +
", lists=" + lists +
", dog=" + dog +
'}';
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Boolean getBoss() {
return boss;
}
public void setBoss(Boolean boss) {
this.boss = boss;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public Map<String, Object> getMaps() {
return maps;
}
public void setMaps(Map<String, Object> maps) {
this.maps = maps;
}
public List<Object> getLists() {
return lists;
}
public void setLists(List<Object> lists) {
this.lists = lists;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
之后我们把所有属性和配置文件中相关的配置进行绑定 这里我们要用到一个注释@ConfigurationProperties 在使用前,我们要先在pom文件中加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
同时,这个东西要能起作用,我们一定得把它放到容器中,只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties的功能
/**
* 将配置文件中配置的没一个属性的值映射到这个组建中
* @configurationproperties:告诉springboot将本类中的所有属性和配置文件中相关的配置进行绑定
* prefix="person"配置文件中person下面的所有属性进行一一映射
* 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties的功能
*/
@Component
@ConfigurationProperties(prefix="person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object>lists;
private Dog dog;
@Override
public String toString() {
return "Person{" +
"lastName='" + lastName + '\'' +
", age=" + age +
", boss=" + boss +
", birth=" + birth +
", maps=" + maps +
", lists=" + lists +
", dog=" + dog +
'}';
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Boolean getBoss() {
return boss;
}
public void setBoss(Boolean boss) {
this.boss = boss;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public Map<String, Object> getMaps() {
return maps;
}
public void setMaps(Map<String, Object> maps) {
this.maps = maps;
}
public List<Object> getLists() {
return lists;
}
public void setLists(List<Object> lists) {
this.lists = lists;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
}
然后运行一下 我们打开test下的程序,是一个springboot的单元测试,可以在测试期间类似于编码一样自动注入容器的功能 我们直接把person注入进来,然后在控制台输出一下person
/*
springboot单元测试
可以在测试期间类似于编码一样自动注入容器的功能
*/
@SpringBootTest
class DemoApplicationTests {
@Autowired
Person person;
@Test
void contextLoads() {
System.out.println(person);
}
}
@Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 完成之后我们来运行一下测试程序
出现这样的结果,说明从配置文件中获得值就成功了
Properties配置文件值的获取
这个和YAML文件获取的方法相似,我们先编辑一下properties文件(注意需要把之前写的yml文件注释掉)
person.last-name=张三
person.age=20
person.boss=false
person.birth=2019/12/12
person.maps.k1=v1
person.maps.k2=v2
person.lists=a,b,c
person.dog.name=white
person.dog.age=10
我们直接运行测试文件
这里我们发现值是传递出来了,但是出现了乱码情况
IDEA默认使用的是utf-8格式,然而properties文件之前用的都是ASCLL格式,所以这里我们需要修改一下 点file打开setting,搜索file enc,然后将底下的properties files改为utf-8,在后边的Transparent native-to-ascii conversion的框中打钩
这次就没有问题了