SpringBoot(2)—— 配置
SpringBoot 提供了 2 种配置文件类型:properties 和 yml/yaml。
默认配置文件的名称:application
可以有多个配置文件,会按一定优先级读取:properties > yml > yaml
1. YAML 简介
YAML (YAML Ain’t Markup Language)是一种直观的能被电脑识别的数据序列化格式,并容易被人类阅读,容易和脚本语言交互,可以被支持 YAML 库的不同编程语言导入。
YML 文件是以数据为核心的,比传统的 xml 方式更为简洁。
YAML 文件的扩展名为 yml 或 yaml。
2. 基本语法
大小写敏感
数值前面必须有空格,作为分隔符
使用缩进表示层级关系
缩进时不能用 Tab 键,只能用空格键
缩进的空格数目不重要,只有相通层级的元素左侧对齐即可
# 表示注释,从这个字符一直到行尾,都会被解析器忽略。
3. 数据格式
3.1 对象(map)
对象,就是键值对的集合。例如:
person:
name: xuxumiao
# 行内写法
person: {name: xxm}
3.2 数组
数组是一组按次序排列的值。
数组中,使用 "- "表示数组每个元素。
例如:
address:
- changsha
- shanghai
# 行内写法
address: [changsha,shanghai]
3.3 纯量
纯良,相当于常量,是单个的、不可再分的值。例如:
# 单引号,表示忽略转义字符
msg1: 'hello \n world'
# 双引号,表示会识别转义字符,这里的 /n 会被识别成换行符
msg2: "hello \n world"
3.4 参数引用
相当于变量。格式如下:
name: xxm
person:
name: ${name} #引用 name
4. 读取配置内容
4.1 @Value
例如:
yml 配置中:
name: xxm
Controller
类:
@RestController
public class HelloController {
/**
* 读取配置内容的方法 1:
*/
@Value("${name}")
private String name;
/**
* 对应的方法
*/
@RequestMapping("/hello2")
public String hello() {
return name;
}
}
配置完成后,启动项目,访问 /hello2
:
4.2 Environment
yml 配置延续上一部分。
Controller
类:
@RestController
public class HelloController {
/**
* 读取配置内容的方法 2:
*/
@Autowired
private Environment environment;
/**
* 对应的方法
*/
@RequestMapping("/hello3")
public String hello3() {
return environment.getProperty("name3");
}
}
4.3 @ConfigurationProperties
yml 配置:
user:
name: xxm
gender: male
age: 28
再创建一个实体类 User,在类上添加注解 @Component
和 @ConfigurationProperties
:
package com.xuxumiao.springbotinit.domain;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author: xxm
* @Date: 2022/1/21 0:50
*/
@Data
@Component
@ConfigurationProperties(prefix = "user")
public class User {
private String name;
private String gender;
private int age;
}
Controller
类:
/**
* 读取配置内容的方法 3:
*/
@Autowired
private User user;
/**
* 对应的方法
*/
@RequestMapping("/hello4")
public String hello4() {
return user.getName() + ":" + user.getGender() + ":" + user.getAge();
}
运行项目,并且访问 /hello4
:
5. 配置 SpringBoot 注解处理器
在 pom.xml
中引入注解处理器:
6. profile
profile 配置文件是专门用于进行动态配置切换的。
spring 快速构建,创建一个新模块 springboot-profiles,以用做练习。
6.1 分支与激活分支——多文件
创建几个 yml 文件 ,分别命名为:
application-dev.yml、application-prod.yml、application-test .yml、
在这 3 个 yml 文件中分别设置不同的端口号,例如:
server:
port: 8091
在 application.yml
中,可以通过配置来选择激活哪一个分支。
例如:
spring:
profiles:
active: dev
6.2 分支与激活分支——单文件
spring:
config:
activate:
on-profile: dev
6.3 虚拟机配置
在编辑配置-虚拟机选项
中这样填写:-Dspring.profiles.active=dev
如图:
6.4 命令行参数配置
在编辑配置 - 程序实参
中这样填写:--spring.profiles.active=pro
6.5 命令行启动
在命令行启动 jar包时,直接使用参数。
第一步:先用 maven
的 package
指令打包项目。
第二步:在输出的 jar包目录下,运行命令行,输入指令:
java -jar .\springboot
6.6 项目内部配置
Springboot 项目程序启动时,会从以下位置加载配置文件:
file:./config/ :当前项目下的 /config 目录下
file:./ :当前项目的根目录
classpath:/config/ : classpath 的 /config 目录
classpath:/ : classpath 的根目录
加载顺序为从上至下,高优先级配置的属性会生效。