⭐️前言⭐️
Spring Boot项目中重要的数据都是在配置文件中配置的,下边我们就来学习SpringBoot中的配置文件的具体详情。
????博客主页: ????【如风暖阳】????
????精品Java专栏【JavaEE进阶】、【JavaEE初阶】、【MySQL】、【数据结构】
????欢迎点赞 ???? 收藏 ⭐留言评论 ????私信必回哟????????本文由 【如风暖阳】 原创,首发于 CSDN????
????博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言
????博客中涉及源码及博主日常练习代码均已上传GitHub
????内容导读????
????1.配置文件的作用及格式
在SpringBoot的整个项目中,所有重要的数据都是在配置文件中设置的,比如:
- 数据库的连接信息(包含用户名和密码的设置)
- 项目的启动端口
- 第三方系统的调用密钥等信息
- 用于发现和定位问题的普通日志和异常日志
如果没有配置信息,那么Spring Boot项目就不能连接和操作数据库,甚至是不能保存可以用于排查问题的关键日志,所以配置文件的作用是非常重要的。
Spring Boot的配置文件的分类如下:
1、系统的配置文件,比如连接字符串、日志的相关设置,是系统定义好的。
2、用户自定义的。
Spring Boot的配置文件主要分为以下两种格式:
- .properties
- .yml
properties
和yml
是两个不同时代的产物,properties
就属于iPhone 8,而yml
属于最新的iPhone 14 pro Max,yml
天然支持中文,如果要想让properties
也支持中文,需要进行以下配置:
在Settings搜索栏中搜索encoding
然后将所有位置的编码方式都改成UTF-8
如果想让所有生成的新项目也同样支持中文,再在此处也进行设置:
两种格式的配置文件遵循以下规则:
- 一个项目中可以存在以上两种配置文件(
properties
和yml
),但是不建议一个项目中出现两种配置文件。 - 当一个项目的某个配置,出现在两种格式的配置文件中时,尼玛配置项会以
properties
为主(忽略yml
中的配置)
????2.properties 配置文件
2.1 基本语法
properties
是以键值对的形式配置的,Key和Value之间是以“=”连接的,如:
# 配置项目端口号
server.port=8080
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8mb4&useSSL=true
spring.datasourse.name=root
spring.datasourse.password=1234
# 自定义配置项
csdn.token=xxx
配置文件中可以使用
#
来添加注释信息
2.2 读取配置文件
如果想在项目中主动的读取配置文件中的内容,就可以使用@Value
注解搭配${}
格式来读取,如下代码所示:
@Controller
public class UserController {
@Value("${server.port}")
private String port;
@PostConstruct
public void UserController(){
System.out.println("post:"+port);
}
}
运行结果如下:
@Controller
在Spring Boot启动的时候会注入到框架中,注入到框架中时会执行@PostConstruct
初始化方法,这个时候就能读取到配置信息了。
2.3 缺点分析
像下图这几条配置信息,就有很多的冗余
如果想解决以上冗余问题,就需要使用yml
配置文件了。
????3.yml 配置文件
3.1 文件说明
yml
是YAML的缩写,它的全称Yet Another Markup Language 翻译成中⽂就是“另⼀种标记语⾔”。
其有以下优点:
- 写法简单,可读性高
- 支持更多的数据类型
- 可以跨语言使用,支持更多的编程语言,比如Golang、PHP、Python、Ruby等。
3.2 基本语法
yml
配置文件的基础语法是Key: Value
,注意key
和value
之间使用英文冒号加空格的方式组成,其中的空格不能省略。
下边将properties
中的配置,在yml
文件中进行表示:
# 配置项目端口号
server: 8080
# 连接数据库
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8mb4&useSSL=true
name: root
password: 1234
# 自定义配置项
csdn.token: xxx
两者对比:yml
读取配置的方法和properties
读取配置的方法相同,都是使用@Value
注解搭配${}
格式来读取。
3.3 进阶使用
3.3.1 单双引号问题
在配置文件中加上如下配置:
获取配置,查看打印情况:
@Controller
public class UserController {
@Value("${string1}")
private String string1;
@Value("${string2}")
private String string2;
@Value("${string3}")
private String string3;
@PostConstruct
public void UserController(){
System.out.println("string1:"+string1);
System.out.println("string2:"+string2);
System.out.println("string3:"+string3);
}
}
在运行结果中可以发现,只有第三行打印结果换行了。
这是因为yml
中如果使用了双引号,就会按照原语义执行(\n
意为换行),如果是单引号或者什么都不加,那么默认会将字符串中的特殊字符进行自动转义,比如\n
->\\n
(转义)处理
3.3.2 配置对象
我们还可以在yml
中配置对象,有以下两种配置方式:
这个时候就不能用@Value
来读取配置中的对象了,此时要使用另一个注解@ConfigurationProperties
来读取,具体实现如下:
@Data
@ConfigurationProperties(prefix="student2")
@Component
public class Student {
private int id;
private String name;
private int age;
}
@Controller
public class UserController {
@Autowired
private Student student;
@PostConstruct
public void UserController(){
System.out.println("student2:"+student);
}
}
运行结果如下:
3.3.3 配置集合
配置文件也可以配置list
集合,如下所示:
集合的读取和对象一样,也是使用@ConfigurationProperties
来读取的,具体实现如下:
@Component
@Data
@ConfigurationProperties("dbtypes")
public class ReadList {
private List<String> name;
}
????4.properties VS yml
-
properties
是以key=value
的形式配置的键值类型的配置文件,而yml
使用的是类似json
格式的树形配置方式进行配置的,yml
层级之间使用换行缩进的方式配置,key
和value
之间使用:
英文冒号加空格的方式设置,并且空格不可省略。 -
properties
是早期并且默认的配置文件格式,但其配置存在一定的冗余数据,使用yml
可以很好的解决数据冗余的问题。 -
yml
通用性更好,支持更多的语言 -
yml
支持更多的数据类型,比如对象、集合等类型。
⭐️最后的话⭐️
总结不易,希望uu们不要吝啬你们的????哟(^U^)ノ~YO!!如有问题,欢迎评论区批评指正????