Spring Boot的两种配置文件

时间:2022-12-10 08:02:02

Spring Boot的两种配置文件

⭐️前言⭐️

Spring Boot项目中重要的数据都是在配置文件中配置的,下边我们就来学习SpringBoot中的配置文件的具体详情。

????博客主页: ????【如风暖阳】????
????精品Java专栏【JavaEE进阶】、【JavaEE初阶】【MySQL】【数据结构】
????欢迎点赞 ???? 收藏留言评论 ????私信必回哟????

????本文由 【如风暖阳】 原创,首发于 CSDN????

????博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言

????博客中涉及源码及博主日常练习代码均已上传GitHub


Spring Boot的两种配置文件

????1.配置文件的作用及格式

在SpringBoot的整个项目中,所有重要的数据都是在配置文件中设置的,比如:

  • 数据库的连接信息(包含用户名和密码的设置)
  • 项目的启动端口
  • 第三方系统的调用密钥等信息
  • 用于发现和定位问题的普通日志和异常日志

如果没有配置信息,那么Spring Boot项目就不能连接和操作数据库,甚至是不能保存可以用于排查问题的关键日志,所以配置文件的作用是非常重要的。

Spring Boot的配置文件的分类如下:
1、系统的配置文件,比如连接字符串、日志的相关设置,是系统定义好的。
2、用户自定义的。

Spring Boot的配置文件主要分为以下两种格式:

  • .properties
  • .yml
    Spring Boot的两种配置文件

propertiesyml是两个不同时代的产物,properties就属于iPhone 8,而yml属于最新的iPhone 14 pro Max,yml天然支持中文,如果要想让properties也支持中文,需要进行以下配置:

在Settings搜索栏中搜索encoding
Spring Boot的两种配置文件
然后将所有位置的编码方式都改成UTF-8
Spring Boot的两种配置文件
如果想让所有生成的新项目也同样支持中文,再在此处也进行设置:
Spring Boot的两种配置文件
两种格式的配置文件遵循以下规则:

  • 一个项目中可以存在以上两种配置文件(propertiesyml),但是不建议一个项目中出现两种配置文件。
  • 当一个项目的某个配置,出现在两种格式的配置文件中时,尼玛配置项会以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);
    }
}

运行结果如下:
Spring Boot的两种配置文件

@Controller在Spring Boot启动的时候会注入到框架中,注入到框架中时会执行@PostConstruct初始化方法,这个时候就能读取到配置信息了。

2.3 缺点分析

像下图这几条配置信息,就有很多的冗余
Spring Boot的两种配置文件
如果想解决以上冗余问题,就需要使用yml配置文件了。

????3.yml 配置文件

3.1 文件说明

yml是YAML的缩写,它的全称Yet Another Markup Language 翻译成中⽂就是“另⼀种标记语⾔”。

其有以下优点:

  • 写法简单,可读性高
  • 支持更多的数据类型
  • 可以跨语言使用,支持更多的编程语言,比如Golang、PHP、Python、Ruby等。

3.2 基本语法

yml配置文件的基础语法是Key: Value,注意keyvalue之间使用英文冒号加空格的方式组成,其中的空格不能省略。

下边将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

两者对比:
Spring Boot的两种配置文件
yml读取配置的方法和properties读取配置的方法相同,都是使用@Value注解搭配${}格式来读取。

3.3 进阶使用

3.3.1 单双引号问题

在配置文件中加上如下配置:
Spring Boot的两种配置文件

获取配置,查看打印情况:

@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);
    }
}

Spring Boot的两种配置文件
在运行结果中可以发现,只有第三行打印结果换行了。

这是因为yml中如果使用了双引号,就会按照原语义执行(\n意为换行),如果是单引号或者什么都不加,那么默认会将字符串中的特殊字符进行自动转义,比如\n->\\n(转义)处理

3.3.2 配置对象

我们还可以在yml中配置对象,有以下两种配置方式:
Spring Boot的两种配置文件
这个时候就不能用@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);
    }
}

运行结果如下:
Spring Boot的两种配置文件

3.3.3 配置集合

配置文件也可以配置list集合,如下所示:
Spring Boot的两种配置文件
集合的读取和对象一样,也是使用@ConfigurationProperties来读取的,具体实现如下:

@Component
@Data
@ConfigurationProperties("dbtypes")
public class ReadList {
    private List<String> name;
}

Spring Boot的两种配置文件

????4.properties VS yml

  • properties是以key=value的形式配置的键值类型的配置文件,而yml使用的是类似json格式的树形配置方式进行配置的,yml层级之间使用换行缩进的方式配置,keyvalue之间使用: 英文冒号加空格的方式设置,并且空格不可省略。
  • properties是早期并且默认的配置文件格式,但其配置存在一定的冗余数据,使用yml可以很好的解决数据冗余的问题。
  • yml通用性更好,支持更多的语言
  • yml支持更多的数据类型,比如对象、集合等类型。

⭐️最后的话⭐️
总结不易,希望uu们不要吝啬你们的????哟(^U^)ノ~YO!!如有问题,欢迎评论区批评指正????

Spring Boot的两种配置文件