一.properties配置文件
1.基本语法
properties 采用键值的格式来配置的,key与value之间是由‘=’连接的。
比如配置端口号:
server.port=80
我们可以在properties配置文件中写官方规定好的,内容由很多,大家可以自行翻阅官方文档:Common Application Properties :: Spring Boot。
我们还可以自定义一些键值对,语法也是一样。
myData=123
2.读取配置文件
读取配置文件的内容时,我们要使用 @Value 注解。
@Value 的格式,@Value("${名称}"),在{}内写入我们在配置文件中自定义内容的名称即可。
比如我们在配置文件中自定义写了一个:
myData=123
读取配置文件:
@Value("${myData}")
private String myData;
//名字随意,写成下面这样也能读取到
private String mydata;
在Spring Boot项目中读取properties配置文件时,读取到的数据默认情况下是字符串类型,但Spring Boot具备自动类型转换的能力,可将这些字符串数据转换为其他合适的数据类型。
还是上面的例子,这样也是可以的:
@Value("${myData}")
private int myData;
但是如果我们将myData的类型改成Boolean,那就会报错:
二.YAML配置文件
1.格式介绍
YAML(YAML Ain’t Markup Language)是一种基于层次结构的数据序列化格式。yml和yaml都是YAML的扩展名,两者在绝大多数情况下功能和作用是相同的,两者的语法也是相同的。
如果同时存在application.properties和application.yml(.yaml) ,properties的优先级更高。
properties配置文件会产生很多冗余信息,像下面的:
spring.jdbc.datasource.driverClassName=com.mysql.cj.jdbc.driver
spring.jdbc.datasource.url=jdbc:mysql:///springboot_01
spring.jdbc.datasource.username=root
spring.jdbc.datasource.password=root
如果我们使用就不会产生冗余信息:
spring:
jdbc:
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql:///springboot_01
username: root
password: root
2.基本语法
yml的是属性结构的配置文件,通过缩进来表示层级。写法是:
#单层
key: value
#多层
key:
key1: value1
key2: value2
这里要注意,: 与value之间有一个空格,这个空格是必须写的。
yml配置null:
myData: ~
yml配置空字符串:
#单引号双引号都可以
myData: ''
myData: ""
yml配置集合:
#通过 - 来连接,注意 - 后也有空格
student:
name:
- Tom
- Jack
3.读取配置文件
读取的方法与properties配置文件相同,都是通过@Value("${}")。
@Value("${myData}")
private String myData;
但是注意@Value只能读取一个元素,如果要让 @Value 接收一个集合它就干不了了。
这个时候我们就要使用批量引入配置属性的注解:@ConfigurationProperties,这个注解将配置文件里的属性绑定到Java Bean上。
我们使用 @ConfigurationProperties 有个非常重要的点要注意,我们必须写 Setter 方法。
因为Spring Boot是通过反射机制来实现这种绑定的。Spring Boot 在绑定配置属性时,会调用 Java Bean 类中对应的 Setter 方法将配置文件中的属性值设置到对象的字段中。如果没有提供 Setter 方法,Spring Boot 就无法将配置属性的值设置到对象的字段中,从而导致绑定失败。
这个时候我们可以引入 Lombok 来一键生成,相当方便。
此外 @ConfigurationProperties 要加在类上,这个注解是将属性放入Bean中,所以这个类必须放入容器中才能绑定
例子一,配置对象:
@Data
@Component
@ConfigurationProperties(prefix = "student")
public class Student {
public int id;
public String name;
}
student:
id: 1
name: Tom
例子二,配置集合:
@Data
@Component
@ConfigurationProperties(prefix = "student")
public class Student {
public List<String> name;
public Map<String,String> map;
}
student:
name:
- Tom
- Jack
map:
key1: value1
key2: value2
4.YAML的优势
1)层次结构:YAML文件使用缩进和冒号来表示层次结构,使得数据之间的关系更加清晰和直观。这样可以更容易理解和维护复杂的配置,特别适用于深层次嵌套的配置情况。
2)自我描述性:YAML文件具有自我描述性,字段和值之间使用冒号分隔,并使用缩进表示层级关系。这使得配置文件更易于阅读和理解,并且可以减少冗余的标点符号和引号。
3)注释支持:YAML格式支持注释,可以在配置文件中添加说明性的注释,使配置更具可读性和可维护性。相比之下,properties文件不支持注释,无法提供类似的解释和说明。
4)多行文本:YAML格式支持多行文本的表示,可以更方便地表示长文本或数据块。相比之下,properties文件需要使用转义符或将长文本拆分为多行。
5)类型支持:YAML格式天然支持复杂的数据类型,如列表、映射等。这使得在配置文件中表示嵌套结构或数据集合更加容易,而不需要进行额外的解析或转换。
6)更好的可读性:由于YAML格式的特点,它更容易被人类读懂和解释。它减少了配置文件中需要的特殊字符和语法,让配置更加清晰明了,从而减少了错误和歧义。
三.多环境配置和使用
在Spring Boot中,可以使用多环境配置来根据不同的运行环境(如开发、测试、生产)加载不同的配置。SpringBoot支持多环境配置让应用程序在不同的环境中使用不同的配置参数,例如数据库连接信息、日志级别、缓存配置等。 也就是说我们可以自行调用不同的配置文件。
这里我们基于YAML的配置文件来实现多环境配置。
先创建一个 application.properties ,然后再创建 application-dev.yml 、 application-test.yml、 application-prod.yml。
我们可以在 application.properties 中使用 spring.profiles.active 来指定配置文件:
student:
name:
- Tom
- Jack
spring:
profiles:
active: test