SpringBoot配置文件
1、配置文件
SpringBoot使用一个全局配置文件,这个文件的文件名是固定的,存放于src/main/resources目录或者类路径/config下
- application.properties
- application.yml
配置文件的作用:配置文件可以修改一些SpringBoot自动配置的默认配置信息。
2、YAML语法
以配置端口号为例,看看.yml文件和.xml文件的配置格式
.yml:
server:
port: 8081
.xml:
<servler>
<port>8081</port>
</servler>
YAML以数据为中心,比xml,json等更适合做配置文件
2.1、YAML基本语法
key:(空格)value:表示一组键值对,
空格必须要有
以空格的缩进来控制层级关系,只要是左对齐的一列数据,就是同一层级的数据。缩进时,不允许使用Tab键,只允许使用空格
server:
port: 8081
path: /hello
# port和path是同一层级
属性和值也是大小写敏感的!
2.2、值的写法
YAML支持的三种数据结构:字面量(单个的,不可再分的值),数组(一组按次序排列的值),对象(键值对的集合)
2.2.1、字面量:普通的值(数字,字符串,布尔值)
- 一般都是通过key: value来写的
- 字符串默认不用加上单引号或者双引号
“”双引号:字符串中的特殊转义字符会转义,比如“A \n B”,输出:A (换行) B
”单引号:字符串中的特殊转移字符不会转移,比如‘A \n B’,输出:A \n B
2.2.2、数组(List,Set)
用- 表示数组中的一个元素
hobby:
- basketball
- playGames
- football
行内写法:
hobby: [basketball,palyGames,football]
2.2.3、对象、Map(键值对)
map:
key1: value1
key2: value2
行内写法:
map: {key1: value1,key2: value2}
2.2.4、文档块
使用—分开
2.3、配置文件值的注入
javabean:
public class Person {
private String name;
private int age;
private String sex;
private Date birthday;
private Pet pet;
private List hobby;
private Map<String,Object> map;
// get、set、toString方法省略
}
.yml配置文件:
person: name: "灭霸" age: 666 sex: 男 birthday: 6666/66/66 pet: name: "旺财" age: 6 hobby: - "打响指" - "还是打响指" - "打代码" map: key1: value1 key2: value2
配置文件写好之后,怎么把配置文件的值注入进去呢?我们可以使用这个注解:
@ConfigurationProperties,但是前提是,这个类需要是Spring容器中的组件,只有这个类注入到容器中,成为Spring容器的组件,才能使用容器提供的@ConfigurationProperties功能
。
@Component@ConfigurationProperties(prefix = "person")public class Person {...}
@ConfigurationProperties(prefix = “person”):告诉Springboot将本类中的属性与配置文件中的相关配置进行绑定。
prefix = “person”:指明需要跟配置文件中哪个(person)下面的所有属性进行一 一映射
。
2.3.1、properties文件在idea中默认utf-8可能会出现乱码
可以进行以下设置:
2.3.2、@value获取值与@ConfigutationProperties获取值
@value和@ConfigutationProperties都可以实现配置文件值得注入
如果不使用@ConfigutationProperties,我们可以在属性上添加@Value来注入配置文件中的值,但是
每次只能注入一个
@Value("${person.name}")
private String name;
@Value("#{5*5}")
private int age;
用#{表达式}也可以注入值,不用根据配置文件。
- 区别:
@ConfigutationProperties | @value | |
---|---|---|
功能 | 批量注入配置文件中的值 | 一个一个地注入 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
-
.yml配置文件和.properties配置文件都能获取到值。
- 如果只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value
- 如果是需要获取配置文件中的多个值或者专门写一个JavaBean来和配置文件进行映射,使用@ConfigurationProperties
- 使用JSR303数据校验,@Validated
- @Value(”${(无法支持复杂类型,如map)}“),@Value获取不到配置文件中对应的map属性的值
2.3.3、@PropertySource和@ImprotResource和@Bean
@PropertySource:
加载指定的配置文件。只能用于读取.properties配置文件
# 文件名person.properties
person.name="钢铁侠"
person.age=23
加载配置文件,在需要注入的类上标注@PropertySource
Person类:
@Component
@ConfigurationProperties(prefix = "person")
@PropertySource(value = {"classpath:person.properties"})
public class Person {...}
即可记载指定的.properties配置文件。