yaml 配置文件值获取
练习:
步骤,及注意的点:
1、创建两个class:person,和dog,并且初始化。包括数据及set,get方法。
2、在resource下新建一个以.yml为后缀的文件。
3、需要往pom.xml中写一个依赖,导入配置文件处理器,配置文件进行绑定时会有提示。
4、根据以上的格式来写yml文件,需要注意的是,文件中数据类型一定要与写的数据相对应。
5、将配置文件中每一个属性的值,映射到这个组件中。
@ConfigurationProperties告诉springboot 将本类中的所有属性,与配置文件中相关的配置进行绑定。
prefix = “person”:配置文件中哪个下面的所有属性进行一一映射
@ConfigurationProperties(prefix = “person”)默认从全局配置文件中获取值。
所以如果我们想把一些与spring boot一些无关的配置提取出来,就需要用到
@PropertySource(value ={“classpath:person.properties”}) --告诉spring boot 来加载类路径下person.properties的内容并且将他们绑定到这个person对象中。
当然,前提是我们自己已经建了一个person.properties文件,并且已经对其进行配置。
6、只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
所以需要@Component来将其加到容器中。
代码部分:
person:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/*
将配置文件中每一个属性的值,映射到这个组件中。
@ConfigurationProperties告诉springboot 将本类中的所有属性,与配置文件中相关的配置进行绑定
prefix = "person":配置文件中哪个下面的所有属性进行一一映射
只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
所以需要@Component来将其加到容器中。
*/
@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;
public String getLastName() {
return lastName;
}
public Integer getAge() {
return age;
}
public boolean isBoss() {
return boss;
}
public Date getBirth() {
return birth;
}
public Map<String, Object> getMaps() {
return maps;
}
public List<Object> getLists() {
return lists;
}
public Dog getDog() {
return dog;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public void setAge(Integer age) {
this.age = age;
}
public void setBoss(boolean boss) {
this.boss = boss;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public void setMaps(Map<String, Object> maps) {
this.maps = maps;
}
public void setLists(List<Object> lists) {
this.lists = lists;
}
public void setDog(Dog dog) {
this.dog = dog;
}
@Override
public String toString() {
return "Person{" +
"lastName='" + lastName + '\'' +
", age=" + age +
", boss=" + boss +
", brith=" + birth +
", maps=" + maps +
", lists=" + lists +
", dog=" + dog +
'}';
}
}
dog:
public class Dog {
private String name;
private Integer age;
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
yml:
person:
age: 12
last-name: 小明
boss: false
maps: {k1: v1,k2: 12}
lists:
- lisi
- zhaoliu
dog:
name: 小狗
age: 21
birth: 2012/4/9
以下是一个单元测试
spring boot 的单元测试:
可以在测试期间,很方便的类似编码一样进行自动注入等容器的功能。
重点是
@Autowired
Person person;
@SpringBootTest
class DemoApplicationTests {
@Autowired
Person person;
@Test
void contextLoads() {
System.out.println(person);
}
}
测试结果:
Person{lastName='小明', age=12, boss=false, brith=Mon Apr 09 00:00:00 CST 2012, maps={k1=v1, k2=12}, lists=[lisi, zhaoliu], dog=Dog{name='小狗', age=21}}
Spring Boot应该如何导入spring配置文件呢?
一:
二:
补充一点是关于@bean和@component的区别
1、@Component 是用在类上的
2、@Bean 需要在配置类中使用,即类上需要加上@Configuration注解
如果你想要将第三方库中的组件装配到你的应用中,在这种情况下,是没有办法在它的类上添加@Component注解的,因此就不能使用自动化装配的方案了,但是我们可以使用@Bean。
spring boot 导入spring配置文件自己的一些思考:
第一种方法是新建一个xml文件,然后在其中写入bean,并且还需要在需要导入的组件上面标志@importResource(location=“classpath={}”).
但是之所以会有第二种方法就是因为,第二种方法对其进行了优化处理。
优化在于
1、不需要创建xml文件对其进行配置。而是再新建一个类,再类上申明这是一个配置类@configuration。
2、不需要再配置bean,而是直接使用@bean就可以将配置类中方法的return(返回值)这个组件加入到容器中。
3、不需要再在组件上标注@importResource,来获取配置文件后将组件注入容器。而是只需前两步就可以完成操作。