SpringBoot的配置文件

(一)Spingboot配置文件的概念

1.配置文件的作用

配置文件主要是为了解决硬编码带来的问题,把可能会发生改变的信息,放在一个集中的地方,当我们启动程序时,应用程序会从配置文件中读取数据,加载并运行,这样更方便我们去管理数据。

我们来说一下什么是硬编码,简单理解就是将数据直接写到我们代码中,也就是我们说的代码写死

同时使用配置文件可以使程序完成用户和应用程序的交互,或者应用程序与其他应用程序的交互

2.Springboot配置文件

Springboot支持并且定义了配置文件的格式

配置文件中有很多项目或者框架的配置信息:

1)项目的启动端口

2)数据库的连接信息

3)第三方系统的调用密钥等

4)用于发现和定位问题的一些普通日志和报错日志

注:我们使用了Spring这么久,都知道springboot内置了Tomcat服务器,默认端口号使8080,那如果我们想修改就可以通过配置文件来进行更改,即是修改默认端口号

(二)入手配置文件

我们说可以对默认的端口号进行更改,那就来看一下是如何更改的吧

首先我们要找到写配置文件的位置

这个aipplication.properties就是配置文件,我们就在这里修改我们配置文件的信息

这样我们的端口号就被修改为9090了,以后访问这个进程就需要使用9090的端口

(三)配置文件的格式

我们Spring Boot的配置文件有三种格式

1.application.properties

2.application.yml

3.application.yaml

这里的yml就是yaml的缩写,两者的使用方式一样

当我们进程启动时,springboot就会自动从classpath路径找到并且加载application.properties和application.yml,我们application.properties类型的配置文件比较老,是创建springboot项目是默认的文件格式,yml是属于新款

注意实际上我们的.properties和.yml是可以存在同一个项目中,但是当两者共存时,虽然两个配置文件都会加载,但是如果配置文件间有冲突,我们需要以.properties为主,也就是旧版的优先级更高。但是我们实际业务中,还是要统一配置文件的格式,这样可以更好的维护我们的配置文件,减少冲突

1.application.properties配置文件说明

.properties是我们springboot项目默认的配置文件,他的语法也非常简单

1)基本语法

我们就拿之前写过的举例子,properties是用键值对的形式配置的,key与value用=来连接

如果我们想添加注解,我们需要使用#

2)读取配置文件

在项目中,如果我们要主动读取配置文件中的内容,可以使用@value来实现,并且注解使用${}的格式读取

3)properties缺点

properties配置是用key-value形式存储的,但是properties配置文件会有很多冗余信息,比如:

这些信息都是重复的,那我们有没有可能把他们提取出来,然后在低下分组,那就需要进行yml配置文件的格式化了

2.yml配置文件说明

1)yml基本语法

与properties一样,他也是key-value结构的,但是yml是树形结构的配置文件

他的key与value是使用: 的方式组成的,是冒号空格,空格不可以省略

我们说可以减少冗余信息,那我们来看看减少了之后是什么样子

2)yml配置不同数据类型

我们可以用yml配置字符串,布尔值,整数,浮点数,或者空(~在这里代表空)和空字符串(不写就可以,但是不直观,我们可以手动加上""比较明显)

3)yml配置读取

yml的配置读取与properties是一样的都是使用@value("${}")的方式来读取

但是我们在使用的时候需要把: 转换称.也就是properties的形式

注意:我们字符串默认是不用加引号的,如果加引号会有特殊含义

如果字符串加上单引号会使转义字符比如\n失去作用,如果是""就不会

4)配置对象

我们还可以在yml中配置一个对象

但是这样就不可以使用@Value来读取配置文件的对象了,需要使用另一个注解来读取

这样我们就可以完成配置文件的访问

5)配置list和map

配置list也很简单如下图:

而且读取与对象一样都是通过@ConfigruationProperties来读取

配置map

读取对象也是类似的

yml的优缺点:

优点:可读性高,比较简单,也方便理解,可以表达对象,list,map等更多数据类型,同时支持更多的变成语言

缺点:不适合写太复杂的配置文件,因为yml是树形的,所以太复杂就会导致太乱

相关推荐
颜淡慕潇21 分钟前
【K8S问题系列 |19 】如何解决 Pod 无法挂载 PVC问题
后端·云原生·容器·kubernetes
ProtonBase27 分钟前
如何从 0 到 1 ,打造全新一代分布式数据架构
java·网络·数据库·数据仓库·分布式·云原生·架构
乐之者v33 分钟前
leetCode43.字符串相乘
java·数据结构·算法
suweijie7684 小时前
SpringCloudAlibaba | Sentinel从基础到进阶
java·大数据·sentinel
公贵买其鹿5 小时前
List深拷贝后,数据还是被串改
java
向前看-8 小时前
验证码机制
前端·后端
xlsw_8 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹9 小时前
基于java的改良版超级玛丽小游戏
java
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭9 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫9 小时前
泛型(2)
java