1、配置文件
- Spring Boot使用配置文件是固定的
application.properties
application.yaml
YAML:(YAML Ain’t Markup Language )
YAML: A Markup Language 是一个标记语言
YAML: isn’t Markup Language 不是一个标记语言
YAML:以数据为中心,比如json,xml等更适合做配置文件
YAML配置例子
server:
port:9998
2 、YAML基本语法
- k(空格)v:表示一对键值对(空格必须有) 以空格的缩进来控制层级关系,只要左对齐的一个数列,就是同一层级。
- 属性和值大小写敏感
server:
port:9998
path:/hello
- 值的写法
-
字面量:普通的值(数字,字符串,布尔)
k:v :字面直接来写
字符串默认不需要加上单引号和双引号;
双引号:不会转移字符里面的特殊字符,特殊字符会作为本来的意思。
name:“张三/nl isi” ; 输出:张三 换行 lisi
单引号:会转移字符,特殊字符只是普通字符串数据 -
对象、Map(属性和值)(键值对)
对象还是k:v的方式:在下一行来写对象的属性和值的关系;注意缩进。
frinds:
lastname:zhangsan
age:19
//行内写法
frinds:{lastname:zhangsan,age:19}
- 数组(List,Set)
用-值表示数组的一个元素
pets:
- cat
- dog
- pig
行类写法
pets:[cat,dog,pig]
3、获取配置文件的值
Yaml里面
server:
port:9998
user:
name: denghao
age: 19
map: { k1: v1,k2: v3}
list:
- lisi
- zhaoliu
dog:
name1: xiaohau
age1: 2
javaBean中
/*
* 将配置中的每个属性的值,映射到这个组件中
* @ConfigurationProperties告诉本类中SpringBoot的所有属性和配置文件相关的配置进行绑定
* prefix=“user” 配置文件中的哪个下面的所有属性进行一一映射
* 这个组件只有加入到容器中,才能使用他的功能
* 使用@omponent让他加入容器中
* */
@Component
@ConfigurationProperties(prefix = "user")
public class User {
private String name;
private int age;
private Map<String,Object> map;
private List<Object> list;
// 对象
private Dog dog;
导入配置文件处理器,以后编写编写配置文件就有提示
<!-- 导入配置文件处理器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.1.9.RELEASE</version>
<optional>true</optional>
</dependency>
@ConfigurationProperties和@Value的区别
项目 | @ConfigurationProperties | @Value |
---|---|---|
功能 | 批量注入 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpeEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
@Validated数据校验,必须是@ConfigurationProperties才可以
@Component
@ConfigurationProperties(prefix = "user")
@Validated//数据校验
public class User {
@Email
private String name;
private int age;
private Map<String,Object> map;
private List<Object> list;
// 对象
private Dog dog;
如果说只是在业务逻辑中获取一个某项值,使用@Value
如果说专门编写一个javabean的映射,就用@ConfigurationProperties
4、@PropertySource&@ImportSource
@PropertySource加载指定的配置文件
/*
* 将配置中的每个属性的值,映射到这个组件中
* @ConfigurationProperties告诉本类中SpringBoot的所有属性和配置文件相关的配置进行绑定
* prefix=“user” 配置文件中的哪个下面的所有属性进行一一映射
* 这个组件只有加入到容器中,才能使用他的功能
* 使用@omponent让他加入容器中
* */
@Component
@ConfigurationProperties(prefix = "user")
@PropertySource(value = {"classpath.user.properties"})
@Validated//数据校验
public class User {
private String names;
private int age;
private Map<String,Object> map;
private List<Object> list;
// 对象
private Dog dog;
@Override
public String toString() {
return "User{" +
"names='" + names + '\'' +
", age=" + age +
", map=" + map +
", list=" + list +
", dog=" + dog +
'}';
}
public Map<String, Object> getMap() {
return map;
}
public void setMap(Map<String, Object> map) {
this.map = map;
}
public List<Object> getList() {
return list;
}
public void setList(List<Object> list) {
this.list = list;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
public User(String names, int age) {
this.names=names;
this.age=age;
}
@ImportSource导入spring的配置文件,让配置文件的内容生效
5、Profile
1、我们在主配置文件编写时,文件名可以是 application-{profile}.properties/yaml
默认使用application.properties 的配置
2、激活指定的Profile:
1、可以在配置文件中指定spring.profiles.active=dev
2、命令行:–spring.profiles.active=dev
3、虚拟机参数:Dspring.profiles.active=dev
3、yml多文档块方式
server:
port: 9997
spring:
profiles:
active: dev
---
server:
port: 7776
spring:
profiles: dev