这里写目录标题
- 读取 yaml 配置文件 中的数据,映射到 实体类中
- 1、使用@ConfigurationProperties("person") 注解
- 读取 properties 配置文件 中的数据,映射到 实体类中
- 1、使用@ConfigurationProperties("person") 注解
- 2、使用@PropertySource(value ="classpath:") 和 @Value("${}") 注解
- @Value注解 和 @ConfigurationProperties注解 的 对比
- 参考目录
读取 yaml 配置文件 中的数据,映射到 实体类中
1、使用@ConfigurationProperties(“person”) 注解
文件中的 值(springboot 会自动 读取 四个位置中的以application为名字开头的配置文件,配置文件类型支持 properties、yaml,yml)
person:
name: qinjiang${random.uuid} # 随机uuid
age: ${random.int} # 随机int
happy: false
birth: 2000/01/01
maps: {k1: v1,k2: v2}
lists:
- code
- girl
- music
dog:
name: ${person.hello:other}_旺财 #存在person.hello的值就用,不存在就用 other
age: 1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
person 实体类
/*
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
*/
@Component //注册bean到容器中
@ConfigurationProperties("person")
public class person {
private String name;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
//省去了 构造方法、get set 方法、toString 方法
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
Dog 实体类
@Component //注册bean到容器中
public class Dog {
private String name;
private Integer age;
//省去了 构造方法、get set 方法、toString 方法
- 1
- 2
- 3
- 4
- 5
在测试类中,进行测试
@SpringBootTest
class CookfoodApplicationTests {
@Autowired
com.ouring.pojo.person person;
@Test
void contextLoads() {
System.out.println(person);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
读取 properties 配置文件 中的数据,映射到 实体类中
1、使用@ConfigurationProperties(“person”) 注解
【注意】properties配置文件在写中文的时候,会有乱码 , 我们需要去IDEA中设置编码格式为UTF-8;
settings–>FileEncodings 中配置;
文件中的 内容(springboot 会自动 读取 四个位置中的以application为名字开头的配置文件,配置文件类型支持 properties、yaml,yml)
person.name=koma
person.age=12345
person.happy=false
person.birth=2000/01/01
person.maps.koma1=koma1
person.maps.koma2=koma2
person.lists[0]=lili0
person.lists[1]=lili1
person.lists[2]=lili2
person.dog.name=_旺财
person.dog.age=99
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
实体类,与测试类,都不变。(也就是 还是@ConfigurationProperties("person")
这个注解在发挥作用,值必须来自于 springboot 自动获取的 配置文件中的信息)
但是,同样的我们可以自定义,使用哪个配置文件中的内容。
2、使用@PropertySource(value =“classpath:”) 和 @Value("${}") 注解
文件中的内容
=zhangsan
=2000/07/31
=lili5,lili4,lili3
- 1
- 2
- 3
@Component //注册bean
@PropertySource(value ="classpath:") //加载指定的配置文件;
public class person {
@Value("${}") //1、这个注解,也会自动的从springboot自动获取的配置文件中,寻找与之配对的数值进行注入。
private String name;
@Value("#{9*7}") // #{SPEL} Spring表达式,之前也一直在mybatis的 XML 配置中使用
private Integer age;
@Value("true") // 字面量
private Boolean happy;
@Value("${}") //2、就像上面中的配置文件的数据,会注入到与之配对的变量,并且外层的配置文件的优先级更高。
private Date birth;
@Value("${}")
private List<Object> lists;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
@Value注解 和 @ConfigurationProperties注解 的 对比
1、@ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加
2、松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定。可以测试一下
3、JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性
4、复杂类型封装,yml中可以封装对象 , 使用value就不支持
结论:
配置yml和配置properties都可以获取到值 , 强烈推荐 yml;
如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;
参考目录
狂神
/hellokuangshen/p/
B站 狂神
/video/BV1PE411i7CV?p=4
SpringBoot 官方文档,对于 这些 注解的 描述 与 使用
/spring-boot/docs/2.5.4/reference/htmlsingle/#-bean-binding