文章目录
- 配置文件的格式有哪些
- 配置文件的加载优先级
- yml配置格式示例Demo
- yml知识
- 基本语法
- 单引号和双引号的区别
- 行内写法
- 引用
- 外部传参
- 关于错误
- 属性值可以为空吗?
- yaml书写格式
配置文件的格式有哪些
application.properties
以key=value键值对的形式书写
#注释
redis.ip=127.0.0.1
redis.port=6379application.yml或application.yaml
梯级同级对齐,例如下图,ip和port同级,同属redis下的配置,则ip和port的首字母需要对其,分号(:)后需要有需要有空格(至少有1个)
#注释
redis:
ip: 127.0.0.1
port: 6379配置文件的加载优先级
appliacation.properties>appliacation.yml>application.yaml
相同配置参数,优先级高的生效。
yml配置格式示例Demo
例子表示获取yml配置文件的的三种方式
- @Value注解
- Environment
- 对象注入
如下为三种获取方式
application.yml
server:
port: 8800
name: abc
person:
name: hello
age: 88
addr:
- bj
- wh
address:
- wuhan
- shanghai
#数组行内写法
address2: [bj,wh]Person.java
package com.it2.springboothello02.bean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private int age;
private String[] addr;
public String getName() {
return name;
}
public void setName(String name) {
= name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String[] getAddr() {
return addr;
}
public void setAddr(String[] addr) {
this.addr = addr;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}HelloController.java
package com.it2.springboothello02.controller;
import com.it2.springboothello02.bean.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
/**
* yml参数的注入方式
*/
@RestController
public class HelloController {
/**
*第一种@Value(${key})
*/
@Value("${name}")
private String name;
@Value("${}")
private String name2;
@Value("${address[0]}")
private String city;
/**
* 第二种Environment
*/
@Autowired
private Environment env;
/**
* 第三种对象注入
*/
@Autowired
private Person person;
@RequestMapping("/hello")
public String hello(){
return "hello spring init";
}
@RequestMapping("/hello2")
public String hello2(){
System.out.println("============第一种输出结果(@Value)===========");
System.out.println(name);
System.out.println(name2);
System.out.println(city);
System.out.println("============第二种输出结果(Environment)============");
System.out.println(env.getProperty("name"));
System.out.println(env.getProperty(""));
System.out.println(env.getProperty("address[0]"));
System.out.println("============第三种输出结果(对象)============");
System.out.println(person);
System.out.println(Arrays.toString(person.getAddr()));
return "hello spring init 222";
}
}运行结果:

yml知识
基本语法
- 大小写敏感
- 数值前必须要有空格
- 使用空格缩进来表示层级关系(不要使用tab来缩进,不同系统的tab表达不一样)
单引号和双引号的区别
#单引号和双引号的区别
msg: 'hello \n world' #原样输出,不识别转移字符
msg2: "hello \n world" # 换行输出行内写法
##########对象############
redis:
ip: 127.0.0.1
port: 6379
#yml行内写法(比较少见),行内写法在分号后面同样需要空格
redis2: {ip: 127.0.0.1,port: 6379}
###########数组##########
#常规写法
address:
- wuhan
- shanghai
#数组行内写法
address2: [wuhan,shanghai]引用
name: hello
name2: ${name} #引用前面的name外部传参
redis:
ip: ${REDIS_HOST:127.0.0.1}
port: ${REDIS_PORT:6379}如果外部定义了REDIS_HOST和REDIS_PORT,则使用传入值,否则使用配置值(127.0.0.1和6379)。
关于错误
属性值可以为空吗?
- @Value:不挑选配置格式,允许变量值为空,但是变量名必须在配置中定义。
- Environment:不挑选配置格式,允许变量值为空,也允许变量名为空。
- 对象:不允许变量值为空(当然变量名更不允许为空),但是对象的数组变量可以空(内容可以空,长度不能为0)。
@Value注解和Environment支持各种格式,允许属性值为空,它们支持各种格式。
yaml格式值为null,需要使用~(波浪线)
a: ~ #a=null


但是变量名必须在配置文件中声明,否则将无法运行。(如下图变量名name3没有在配置文件中声明)

对象注入,对象的属性不能为空。
错误的操作

正确的操作(当然我们不能这么配置)

yaml书写格式
boolean: TRUE #true/false,True/False,TRUE/FALSE
float: 3.14 #支持科学计数法,如1.88979222e+5
int: 1 #支持二进制、八进制、十六进制
null: ~ #使用~表示null
string: hello #字符串可以直接书写
string2: "a b" #可以使用双引号包括字符串
date: 2022-06-07 # 日期必须使用yyyy-MM-dd格式
#日期和时间之间需要使用T连接,最后使用+表示时区
datetime: 2022-06-07T12:00:00+08:00
















