文章目录
- 配置文件
- properties配置文件
- 基本语法
- 读取配置文件
- yml配置文件
- 基本语法
- 读取配置文件
- 配置空字符串及null
- 单双引号
- 配置对象
- 配置集合
- 配置Map
- 优缺点
- 优点
- 缺点
配置文件
- 硬编码是将数据直接嵌入到程序或其他可执行对象的源代码中,也就是常说的"代码写死"。
- 配置文件主要是为了解决硬编码带来的问题,把可能会发生改变的信息,放在一个集中的地方,当启动程序时,应用程序从配置文件中读取数据,并加载运行。
- 使用配置文件,可以使程序完成用户和应用程序的交互,或者应用程序与其他应用程序的交互
SpringBoot支持并定义了配置文件的格式,Spring Boot 配置文件有以下三种:
1.application.properties
2.application.yml
3.application.yaml
- 理论上讲 .properties 和 .yml 可以并存在于⼀个项⽬中,当 .properties 和 .yml 并存时,两个配置都会加载,如果配置⽂件内容有冲突,则以 .properties 为主, 也就是 .properties 优先级更⾼。
- 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,通常会采取⼀种统⼀的配置文件格式,这样可以更好的维护(降低故障率)。
properties配置文件
properties 配置文件是最早期的配置文件格式,也是创建 SpringBoot 项目默认的配置文件。
基本语法
properties 是以键值的形式配置的,key 和 value 之间是以"="连接的。
示例:
设置服务器端口号为9090,默认为8080。
# 配置项⽬端⼝号
Server.port=9090
配置连接数据库信息。
#配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
- 缺陷:properties 配置文件中会有很多的冗余的信息。
读取配置文件
如果在项目中,想要主动的读取配置文件中的内容,可以使用 @Value 注解来实现。
@Value 注解搭配使用" ${}"的格式读取
配置文件设置变量。
library.page.num=10
读取配置文件的变量。
@Repository
public class BookDao {
@Value("${library.page.num}")
private int num;
}
yml配置文件
yml 为yaml的简写,实际开发中出现频率最高,yaml 和ylm 的使用方式一样。
基本语法
yml 是树形结构的配置文件,它的基础语法是"key: value",key 和 value 之间使用英文冒号加空格的方式组成,空格不可省略。
# 配置项⽬端⼝号
server:
port: 9090
配置连接数据库信息。
#配置数据库连接信息
spring:
datasource:
url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false
username: root
password: 123456
读取配置文件
yml读取配置的方式和 properties 完全相同
配置空字符串及null
# Null,~代表null
null.value: ~
# "" 空字符串
#:直接后⾯什么都不加就可以了, 但这种⽅式不直观, 更多的表⽰是使⽤引号括起来
empty.value: ''
单双引号
string:
str1: Hello \n Spring Boot.
str2: 'Hello \n Spring Boot.'
str3: "Hello \n Spring Boot"
字符串默认不用加上单引号或者双引号
单引号会转义特殊字符,使其失去特殊功能,始终是一个普通的字符串----特殊字符没用了,比如“\n”
双引号不会转义字符串里面的特殊字符,特殊字符会表示本身的含义----特殊字符有用,比如“\n”
配置对象
示例:
student:
id: 1
name: zhangsan
age: 19
接收该对象时,需要搭配 @ConfigurationProperties 注解来读取。
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {
private Integer id;
private String name;
private Integer age;
}
配置集合
list:
name:
- aa
- bb
- cc
集合的读取和对象一样,使用 @ConfigurationProperties 来读取。
@Component
@ConfigurationProperties("list")
@Data
public class ListConfig {
private List<String> name;
}
配置Map
mapList:
map:
k1: v1
k2: v2
k3: v3
集合的读取和对象一样,使用 @ConfigurationProperties 来读取。
@Data
@Component
@ConfigurationProperties("mapList")
public class MapConfig {
private Map<String, String> map;
}
优缺点
优点
- 可读性高,写法简单, 易于理解
- 支持更多的数据类型,可以简单表达对象,数组,List,Map等数据形态
- 支持更多的编程语言,不止是java中可以使用,在Golang,Python,Ruby,JavaScript中也可以使用
缺点
- 不适合写复杂的配置⽂件
- 对格式有较强的要求(空格规范)