大家好,我是小帅今天我来学习Web开发中的配置文件。
文章目录
- 1. 配置⽂件作⽤
- 2. 配置⽂件入门
- 3. 配置⽂件的格式
- 4. properties 配置⽂件说明
- 4.1 properties 基本语法
- 4.2 读取配置⽂件(@Value 注解)
- 4.3 properties 缺点分析
- 5. yml 配置⽂件说明
- 5.1 yml 基本语法
- 5.2 yml 使⽤进阶
- 5.2.1 yml 配置不同数据类型及 null
- 5.2.2注意事项:@value 值加单双引号
- 5.2.3 配置对象(@ConfigurationProperties读取对象)
- 5.2.4配置集合
- 5.2.5 配置Map
- 6. 总结
1. 配置⽂件作⽤
计算机上有数以千计的配置⽂件, 我们使⽤的绝⼤多数软件, ⽐如浏览器, 微信, Idea, 甚⾄电脑, ⼿机, 都离不开配置⽂件. 我们可能永远不会直接与其中的⼤部分⽂件打交道,但它们确实以不同的形式散落在我们的计算机上, ⽐如C:\Users, C:\Windows⽂件夹, 以及各种 *.config, *.xml ⽂件
SpringBoot配置⽂件
SpringBoot⽀持并定义了配置⽂件的格式, 也在另⼀个层⾯达到了规范其他框架集成到SpringBoot的⽬的.
很多项⽬或者框架的配置信息也放在配置⽂件中, ⽐如:
- 项⽬的启动端⼝
- 数据库的连接信息(包含⽤⼾名和密码的设置)
- 第三⽅系统的调⽤密钥等信息
- ⽤于发现和定位问题的普通⽇志和异常⽇志等.
SpringBoot内置了Tomcat服务器, 默认端⼝号是8080, 但是⽤⼾电脑上8080端⼝号有可能就被其他应⽤程序占⽤了, 所以SpringBoot需要⽀持让⽤⼾⾃定义端⼝号。
2. 配置⽂件入门
我们在前⾯讲了Tocmat 默认端⼝号是8080, 所以我们程序访问时的端⼝号也是8080,但是如果8080端⼝号已经被其他进程使⽤了呢? 我们可以通过配置⽂件来修改服务的端⼝号。
使用server.prort = 9090
重新运⾏程序, 观察⽇志
3. 配置⽂件的格式
Spring Boot 配置⽂件有以下三种:
- application.properties
- application.yml
- application.yaml
yml 为yaml的简写, 实际开发中出现频率最⾼. yaml 和yml 的使⽤⽅式⼀样, 课堂中只讲yml⽂件的使⽤.
当应⽤程序启动时, Spring Boot会⾃动从classpath路径找到并加载application.properties 和 application.yaml 或者application.yml ⽂件.
特殊说明
- 理论上讲 .properties 和 .yml 可以并存在于⼀个项⽬中,当 .properties 和 .yml并存时,两个配置都会加载. 如果配置⽂件内容有冲突, 则以 .properties 为主, 也就是.properties 优先级更⾼.
- 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取⼀种统⼀的配置⽂件格式,这样可以更好的维护(降低故障率).
4. properties 配置⽂件说明
properties 配置⽂件是最早期的配置⽂件格式,也是创建 SpringBoot 项⽬默认的配置⽂件.
4.1 properties 基本语法
roperties 是以键值的形式配置的,key 和 value 之间是以"="连接的,如:
代码:
spring.application.name=spring-IOC-DI-2024-12-14
# 配置项⽬端⼝号
server.port=8080
#配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/db_study?
characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password="123456"
⼩技巧:配置⽂件中使⽤“#”来添加注释信息。
4.2 读取配置⽂件(@Value 注解)
如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤ @Value 注解来实现。
@Value 注解使⽤" ${} "的格式读取,如下代码所⽰:
properties配置如下:
mykey.key1 = bite
程序访问如下:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class PropertiesController {@Value("${mykey.key1}")private String key1;@RequestMapping("/key")public String key() {return "读取到值:" + key1;}}
这里注意一下不要把包导错了
结果可以访问到,properties文件的值
4.3 properties 缺点分析
从上述配置key看出,properties 配置⽂件中会有很多的冗余的信息,⽐如这些:
5. yml 配置⽂件说明
yml 是 YAML 是缩写,它的全称 Yet Another Markup Language 翻译成中⽂就是“另⼀种标记语⾔.我们先来学习yml的语法。
5.1 yml 基本语法
yml 是树形结构的配置⽂件,它的基础语法是"key: value".
key 和 value 之间使⽤英⽂冒号加空格的⽅式组成,空格不可省略。
举个例子
使⽤ yml 连接数据库
yml 和 properties 连接数据库的配置对⽐
5.2 yml 使⽤进阶
5.2.1 yml 配置不同数据类型及 null
# 字符串
string.value: Hello
# 布尔值,true或false
boolean.value: true
boolean.value1: false
# 整数
int.value: 10
# 浮点数
float.value: 3.14159
# Null,~代表null
null.value: ~
# "" 空字符串
#, 直接后⾯什么都不加就可以了, 但这种⽅式不直观, 更多的表⽰是使⽤引号括起来
empty.value: ''
yml 配置读取
yml 读取配置的⽅式和 properties 相同,使⽤ @Value 注解即可,实现代码如下:
yml配置:
# 布尔值,true或false
boolean:value: truevalue1: false
# 整数
int:value: 10
测试代码:
@RestController
public class ReadYml {@Value("${int.value}")private int value;@RequestMapping("/ymlKey")public String key() {return "读取到值:" + value;}}
访问结果:
5.2.2注意事项:@value 值加单双引号
字符串默认不⽤加上单引号或者双引号,如果加英⽂的单双引号可以表⽰特殊的含义。
尝试在 application.yml 中配置如下信息:
string:str1: Hello \n Spring Boot.str2: 'Hello \n Spring Boot.'str3: "Hello \n Spring Boot."
输出结果:
从上述结果可以看出:
- 字符串默认不⽤加上单引号或者双引号。
- 单引号会转义特殊字符,使其失去特殊功能, 始终是⼀个普通的字符串.
- 双引号不会转义字符串⾥⾯的特殊字符, 特殊字符会表⽰本⾝的含义.
5.2.3 配置对象(@ConfigurationProperties读取对象)
我们还可以在 yml 中配置对象,如下配置:
#配置对象
student:id: 1name: zahngsanage: 18
或者是使⽤⾏内写法(与上⾯的写法作⽤⼀致):
student: {id: 1,name: Java,age: 18}
这个时候就不能⽤ @Value 来读取配置中的对象了,此时要使⽤另⼀个注解
@ConfigurationProperties 来读取yml的对象
@ConfigurationProperties 来读取,具体实现如下:
@ConfigurationProperties("student")//类似于属性注入
@Component
@Data
public class Student {private int id;private String name;private int age;
}
调⽤类的实现如下:
@RestController
public class StudentController {@Autowiredprivate Student student;@RequestMapping("/readStudent")public String readStudent() {return student.toString();}
}
使用浏览器访问:
5.2.4配置集合
dbtypes:name:- mysql- sqlserver- db2#注意这里-后面要有空格
集合的读取和对象⼀样,也是使⽤ @ConfigurationProperties 来读取的,具体实现如下:
@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {private List<String> name;
}
访问集合的实现如下:
@RestController
public class ReadYml2 {@Autowiredprivate ListConfig listConfig;@RequestMapping("/readList")public String readList() {return listConfig.toString();}
}
输出结果:
5.2.5 配置Map
yml配置map代码:
#配置map
maptypes:map:k1: kk1k2: kk2k3: kk3
Map的读取和对象⼀样,也是使⽤ @ConfigurationProperties 来读取的,具体实现如下:
@Component
@ConfigurationProperties("maptypes")
@Data
public class MapConfig {private HashMap<String, String> map;
}
打印类的实现如下:
@RestController
public class ReadYml2 {@Autowiredprivate MapConfig mapConfig;@RequestMapping("/readMap")public String readStudent() {return mapConfig.toString();}
}
输出结果:
yml优缺点
优点:
- 可读性⾼,写法简单, 易于理解
- ⽀持更多的数据类型, 可以简单表达对象, 数组, List,Map等数据形态.
- ⽀持更多的编程语⾔, 不⽌是Java中可以使⽤, 在Golang, Python, Ruby, JavaScript中也可以使⽤
缺点:
- 不适合写复杂的配置⽂件
- 对格式有较强的要求(⼀个空格可能会引起⼀场⾎案)
6. 总结
- properties 是以 key=value 的形式配置的键值类型的配置⽂件, yml 使⽤的是树形配置⽅式.
- 读取配置⽂件内容, 使⽤ @Value 注解, 注解内使⽤" ${} "的格式读取.
- yml 层级之间使⽤换⾏缩进的⽅式配置, key 和 value 之间使⽤": "(英⽂冒号)加空格的⽅式设置, 并
且空格不可省略. - properties 为早期并且默认的配置⽂件格式, 其配置存在⼀定的冗余数据, 使⽤ yml 可以很好的解决
数据冗余的问题, 但不适合复杂配置. - yml 可以和 properties 共存,但⼀个项⽬中建议使⽤⼀种配置类型⽂件
- properties 优先级高于yml
好了今天就到这里,感谢观看。