https://www.bilibili.com/video/BV1gW411W76m?p=1
一.配置文件
application.properties 或者application.yml 名字是固定的
作用,修改Spring Boot的自动配置的默认值
YAML 类标记语言 以数据为中心,比json和xml更适合做配置文件
YAML配置例子
server:
port: 8081
XML 浪费大量空间在标记上
<server>
<port>8081</port>
</server>
若YAML和properties都标记,使用前一个
二.YMAL语言:
1.基本语法 key: value表示一对键值对(kv中的空格必须有)
使用空格的缩进来控制层级关系,只要是左对齐的一列数据都是同一层级的内容
属性和值大小写敏感
2.值的写法
字面量:普通的值(数字,字符串,布尔)
k: v 字面直接来写;
字符串默认不加单引号或者双引号
"":双引号不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
例 name: "zhangsan \n lisi" 输出 zhangsan 换行 lisi
'' :单引号 会转义特殊字符,特殊字符最终只是一个普通的字符串
例 name: "zhangsan \n lisi" 输出 zhangsan \n lisi
对象、map(属性和值)(键值对)
k: v 下一行写对象的属性和值;注意缩进
对象还是k: v的方式
friends:
lastname: lll
age: 20
friends: {lastname: lll,age: 20}
数组(List,Set)
用- 值表示数组中的一个元素
pets:
- cat
- dog
pets: [cat,dog]
数组,对象可以进行嵌套
三. 配置文件注入示例
例1
1.创建bean文件夹保存对象类 person , dog
person类:注:输入属性变量 alt+Insert geter and seter 自定插入get和set函数,alt+Insert tostring 自动插入输出函数
注意有两个标注,@ConfigurationProperties声明配置进行绑定;@Component 声明组件在容器中
package com.tou.springbootquick.bean;
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:告诉Spring Boot 将本类中的所有属性和配置文件中的相关的配置进行绑定
* perfix :配置文件中哪个下面的所有属性进行一一映射
* @Component 只有这个组件是容器中的组件,才能使用@ConfigurationProperties功能
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boos;
private Date birth;
private Map<String, Object> maps;
private List<Object> lists;
private Dog dogs;
@Override
public String toString() {
return "person{" +
"lastName='" + lastName + '\'' +
", age=" + age +
", boos=" + boos +
", birth=" + birth +
", maps=" + maps +
", lists=" + lists +
", dogs=" + dogs +
'}';
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Boolean getBoos() {
return boos;
}
public void setBoos(Boolean boos) {
this.boos = boos;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public Map<String, Object> getMaps() {
return maps;
}
public void setMaps(Map<String, Object> maps) {
this.maps = maps;
}
public List<Object> getLists() {
return lists;
}
public void setLists(List<Object> lists) {
this.lists = lists;
}
public Dog getDogs() {
return dogs;
}
public void setDogs(Dog dogs) {
this.dogs = dogs;
}
}
dog类
package com.tou.springbootquick.bean;
public class Dog {
private String name;
private Integer age;
@Override
public String toString() {
return "dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
2.导入配置文件处理器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
3.配置文件设置
server:
port: 8081
server:
context-path: /boot02 项目访问路径
person:
lastName: zhangsan
age: 18
boss: false
birth: 2017/12/12
maps: {k1: 12,k2: V2}
lists:
- lisi
- wangwu
dog:
name: dou
age: 2
测试
相对应的application.properties设置
此文件默认编码为UTF- 8编码,需要在运行时转为ASSIC码 file/settings 搜索file encoding 里面进行设置
设置配置
#idea properties配置文件默认为utf-8
person.last-name = 张三
person.age = 18
person.birth=2017/12/15
person.boos=false
person.maps.k1=v1
person.maps.k2=15
person.lists=a,b,c
person.dogs.name=dog
person.dogs.age=15
@Value数据注入
@Component
//@ConfigurationProperties(prefix = "person")
public class Person {
/***
* <bean class="person">
* <property name="lastName" value="zi字面量/${key}从环境变量、配置文件中获取值/#{SpELl}"></property>
* </bean>
*/
@Value("${person.last-name}")
private String lastName;
@Value("#{11*2}")
private Integer age;
@value和@configurationProperties获取值比较
@ConfigurationProperties | @Value | |
功能 | 批量注入配置文件中的属性 | 一个一个指定 |
松散绑定(松散语法) | 支持 (N与-n相同) | 不支持,大小写敏感 |
SpEL Spring语法语言 | 不支持(#{“11*2”}会报错) | 支持 |
JSR303数据校验 | 支持(@Validated打开校验,变量上@Email确定校验格式) | 不支持 |
复杂类型封装 | 支持 | 不支持 |
如果只是在某个业务逻辑中需要获取一下配置文件的某项值,使用@Value
@RestController
public class HelloController {
@Value("${person.lastName}")
private String name;
@ResponseBody//数据写给浏览器(对象转为json)
@RequestMapping("/hello")
public String hello(){
return "dsdsdsd"+name;
}
}
如果专门编写javabean来和配置文件进行映射,使用@ConfigurationProperties,
数据校验
Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
/***
* <bean class="person">
* <property name="lastName" value="zi字面量/${key}从环境变量、配置文件中获取值/#{SpELl}"></property>
* </bean>
*/
@Email
private String lastName;
private Integer age;
private Boolean boos;
@DateTimeFormat
private Date birth;