们一直使用springboot项目创建完毕后自带的application.properties进行属性的配置,那其实呢,在springboot项目当中是支持多种配置方式的,除了支持properties配置文件以外,还支持另外一种类型的配置文件,就是我们接下来要讲解的yml格式的配置文件。
三种配置文件格式
properties
-
application.properties
server.port=8080 server.address=127.0.0.1
yml和yaml
-
application.yml
server: port: 8080 address: 127.0.0.1
-
application.yaml
server: port: 8080 address: 127.0.0.1
yml 格式的配置文件,后缀名有两种:
yml (推荐)
yaml
接下来我们就来了解下yml配置文件的基本语法
yml配置文件的基本语法:
-
大小写敏感
-
数值前边必须有空格,作为分隔符
-
使用缩进表示层级关系,缩进时,不允许使用Tab键,只能用空格(idea中会自动将Tab转换为空格)
-
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
-
#
表示注释,从这个字符一直到行尾,都会被解析器忽略
@Value
@Value 注解通常用于外部配置的属性注入
具体用法为: @Value("${配置文件中的key}")
@ConfigurationProperties
Spring提供的简化方式:
-
需要创建一个实现类,且实体类中的属性名和配置文件当中key的名字必须要一致
比如:配置文件当中叫sex,实体类当中的属性也得叫sex,另外实体类当中的属性还需要提供 getter / setter方法
-
需要将实体类交给Spring的IOC容器管理,成为IOC容器当中的bean对象
-
在实体类上添加
@ConfigurationProperties
注解,并通过perfect属性来指定配置参数项的前缀
创建实体类
/*阿里云OSS相关配置*/
@Data
@Component
@ConfigurationProperties(prefix = "user")
public class User{
private String name;
private String sex;
private Integer age;
}
使用@Component交给spring容器管理
yml配置
user:
name: zhangsan
age: 18
sex: 男
获取配置类的参数
@Autowired private User user; public void test() { user.getName();//zhangsan user.getAge();//18 }
在我们添加上注解后,会发现idea窗口上面出现一个红色警告:
这个警告提示是告知我们还需要引入一个依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </dependency>
当我们在pom.xml文件当中配置了这项依赖之后,我们重新启动服务,大家就会看到在properties或者是yml配置文件当中,就会提示阿里云 OSS 相关的配置项。所以这项依赖它的作用就是会自动的识别被@Configuration Properties
注解标识的bean对象。
@Value和@ConfigurationProperties区别
@ConfigurationProperties注解我们已经介绍完了,接下来我们就来区分一下@ConfigurationProperties注解以及我们前面所介绍的另外一个@Value注解:
相同点:都是用来注入外部配置的属性的。
不同点:
-
@Value注解只能一个一个的进行外部属性的注入。
-
@ConfigurationProperties可以批量的将外部的属性配置注入到bean对象的属性中。
如果要注入的属性非常的多,并且还想做到复用,就可以定义这么一个bean对象。通过 configuration properties 批量的将外部的属性配置直接注入到 bin 对象的属性当中。在其他的类当中,我要想获取到注入进来的属性,我直接注入 bin 对象,然后调用 get 方法,就可以获取到对应的属性值了