这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战
@ConfigurationProperties
我们写一个配置文件,然后在项目中使用
person:
lastName: hello
age: 18
boss: false
birth: 2017/12/12
maps: {k1: v1,k2: 12}
lists:
- lisi
- zhaoliu
- dd
Dog:
name: 111
age: 22
在实现我们的类,set,get以及toString方法自己生成就可以
@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 class Dog {
public String name;
public Integer age;
}
@Component注解就不用说了,把我们的类注入到Spring中
@ConfigurationProperties(prefix = "person")用来读取我们的yaml文件
这时候我们需要到一个包,用来
编写测试代码
class SpringBootDemoApplicationTests {
@Autowired
Person person;
@Test
void contextLoads() {
System.out.println(person);
}
}
此时!大家可能会有一个问题就是在大家的yaml文件中
这时候我们只需
生成
就可以了
成功运行
@Value
和我们之前从文件中取数据是相同的
| @ConfigurationProperties | @Value | |
|---|---|---|
| 功能 | 批量注入配置文件中的属性 | 一个个指定 |
| 松散绑定(松散语法) | 支持 | 不支持 |
| SpEL | 不支持 | 支持 |
| JSR303数据校验 | 支持 | 不支持 |
| 复杂类型封装 | 支持 | 不支持 |
配置文件yml还是properties他们都能获取到值;
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
数据校验展示
我们需要导入一个jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>2.4.2</version>
</dependency>
@PropertySource
这个标签是用来加载指定的配置文件;将配置文件中配置的每一个属性的值,映射到这个组件中@ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
prefix = "person":配置文件中哪个下面的所有属性进行一一映射;只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
@ConfigurationProperties(prefix = "person")默认从全局配置文件中获取值;
\
我们创建一个person.properties配置文件
person.last-name=里斯
person.age=11
person.birth=2021/11/5
person.boss=true
person.maps.k1=va1
person.maps.k2=vas
person.lists=a,b,c
person.Dog.age=1
person.Dog.name=dd
写好相应的路径,测试代码可以输出相应的值
@ImportResource
导入Spring的配置文件,让配置文件里面的内容生效;
Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;
想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上
我们编写Spring配置文件,需要将Spring配置文件导入到项目当中使用;
我们也可以使用配置类的方式(使用@Configuration标签)
创建一个配置类
@Configuration
public class MyAppConfig {
@Bean
public HelloService helloService(){
return new HelloService();
}
}