【SpringBoot】两种配置文件, 详解 properties 和 yml 的语法格式, 使用方式, 读取配置


前言

各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你:
📕 JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等
📗 Java数据结构: 顺序表, 链表, 堆, 二叉树, 二叉搜索树, 哈希表等
📘 JavaEE初阶: 多线程, 网络编程, TCP/IP协议, HTTP协议, Tomcat, Servlet, Linux, JVM等(正在持续更新)

在这里插入图片描述


提示:是正在努力进步的小菜鸟一只,如有大佬发现文章欠佳之处欢迎批评指点~ 废话不多说,直接上干货!

一、配置文件的作用

项目中很多重要的数据都是在配置文件中配置的, 比如:

  • 数据库的连接信息
  • 项目的启动端口
  • 第三方系统的调用秘钥等信息
  • 设置日志打印级别, 设置保存日志的路径, 发现和定位问题的普通日志和异常日志

就拿第一条来说, 如果你的项目中没有配置文件, 那你怎么连接到你要使用的数据库呢?


二、两种配置文件格式

SpringBoot 中主要有两种配置文件格式 : properties 和 yml(YAML)

  • properties 是默认的配置文件格式, 项目创建好之后就存在
    在这里插入图片描述
  • 要想使用 yml 格式, 可以在 resource 目录下手动创建, 命名为xxx.yml
    在这里插入图片描述

理论上讲 properties 可以和 yml ⼀起存在于⼀个项目当中, 但是当 properties 和 yml ⼀起存在⼀个项目中时, 如果配置文件中出现了同样的配置, 比如 properties 和 yml 中都配置了 “server.port(端口号)”, 那么会以 properties 中的配置为主, 但加载
完 properties 文件之后, 也会加载 yml 文件的配置信息

虽然理论上来讲 properties 可以和 yml 共存, 但实际的业务当中, 通常会采取其中⼀种统⼀的配置文件格式, 这样可以更好的维护(降低故障率)


1, properties 格式语法

properties 是以键值的形式配置的,key 和 value 之间是以 “=” 连接的

使用 # 添加注释

# 配置项目启动端口号, (默认就是8080, 因为SpringBoot内嵌了tomcat, 但你可以修改成任其他端口号)
server.port=8080
# 配置日志的级别
logging.level.root=info
# 配置日志的保存路径和名称
logging.file.path=D:/log_path
logging.file.name=D:/log_path/springboot1.log
# 设置MySQL的链接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/要使用的数据库的库名?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=连接的数据库的密码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 设置MyBatisXML保存路径和命名
mybatis.mapper-locations=classpath:mybatis/*Mapper.xml

这些配置项都是系统配置项, 看不懂没关系, 后续文章会在使用这些配置项时再说明
更多系统配置项可点击查看官方文档

以上都是常用的系统配置项, 但程序员甚至可以自己自定义配置项, 下面会介绍系统配置项和自定义配置项的读取方式

# 自定义配置
name=张三
age=20
imagepath=D:\\image\\

2, properties 格式缺点

上述配置项中有这么一段 :

# 设置MySQL的链接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/要使用的数据库的库名?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=连接的数据库的密码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

你会发现, 这几行都是 spring.datasource 开头的, 这就造成一定程度的代码冗余, 写起来比较麻烦, yml 就解决了这一缺点


3, yml 格式语法

yml 是 YAML 是缩写, 它的全称 Yet Another Markup Language 翻译成中文是“另⼀种标记语言”
yml 格式的优点 :

  1. yml 是⼀个可读性高, 写法简单、易于理解(我不这么认为hhh), 它的语法和 JSON 语⾔类似
  2. yml ⽀持更多的数据类型, 它可以简单表达清单(数组)、散列表,标量等数据形态. 它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等
  3. yml 支持更多的编程语言,它不止是 Java 中可以使用, 在 Golang、PHP、Python、Ruby、JavaScript、Perl 中也适用

yml 是树形结构的配置文件, 它的基础语法是“key: value”, 注意 key 和 value 之间使用英文冒号加空格的方式组成的, 其中的空格不可省略
在这里插入图片描述
使用 yml 配置数据库连接信息 :

spring:
  datasource:
  	url: jdbc:mysql://127.0.0.0:3306/要使用的数据库的库名?characterEncoding=utf8
 	username: root
  	password: 数据库的密码

在 java 代码中一个 Tab 键是 4 个格符, 但在这个 yml 文件中一个 Tab 键是 2 个空格符


4, yml 格式缺点

如果配置项信息比较多, 我认为反而不易于读写(写法不如 properties 那么简单)
一旦 key 和 value 忘记了加空格, 或者带有层级的配置项忘记了换行, 换行的位置不对, 就会导致配置失败, 因此不适合新手使用


5, yml 支持更多类型

# 字符串
str1: 你好 \n 你好
str2: '你好 \n 你好' 
str3: "你好 \n 你好"
# 布尔值
flag1: true
flag2: false
# 整数
num: 10
# 浮点数
f: 6.666
# null ~代表null
Node: ~

字符串默认不需要加上单引号或者双引号
单引号时, 转义字符无效, /n 就当作字符串 “/n”, 双引号时, 转义字符会生效, /n 就仍然表示换行

yml 还可以配置一个对象 :

# 对象
person:
  name: 张三
  age: 18
# 或者使用行内写法表示
student2: {id: 2,name: 李四, age: 15}

yml 还可以配置一个 list 集合

# list集合
colortypes:
  color:
    - 红色
    - 黄色
    - 蓝色
# 或者使用行内写法 colortypes: {color:[红色,黄色,蓝色]}

三、配置文件的读取

properties 和 yml 都使用 @Value(“${ key 值}”) 的方式可读取对应的 value 值

@RestController
public class TestController {
    @Value("${name}")  // 读取用户自定义的配置
    private String name;
 
    @Value("${server.port}")  //读取系统配置项
    private int port;
}

yml 中如果自定义了类的配置信息, 不能使用 @Value , 而是使用 @ConfigurationProperties(“自定义的类名”), 读取方式如下 :

@RestController
@ConfigurationProperties("person")//这里不需要使用$, 里面的值说yml里定义的类名
public class Person{
    //字段与yml里的名称相同
    private String name;
    private int age;
    // 下面一定要写 getter() 和 setter() ! ! ! 这里省略了
}

yml 中如果自定义了 list 集合的配置信息, 也使用 @ConfigurationProperties(“自定义的集合名称”) , 读取方式如下 :

@Component
@ConfigurationProperties("colortypes") // 引号里面的值是 yml 里自定义的集合名称
public class TestList {
    private List<String> color;
    // 下面一定要写 getter() 和 setter() ! ! ! 这里省略了
}

三、不同环境下的配置文件

企业里面的项目, 一般都有三个环境 : 开发环境, 测试环境, (发布之后)上线运行环境, 不同环境下的配置信息可能不同, 为了避免每次更换环境都需要重新修改配置文件的代码, SpringBoot 支持配置不同环境下的配置文件

因为有可能在正式上线之前, 在开发环境和测试环境反复横跳, 如果上线之后有严重 bug , 一般也得再走一遍流程才能再次发布上线

一般会再创建三个配置文件, 命名为 : application-xxx.properties(或.yml), 加上后缀 -xxx 表示不同环境下的命名区分, 一般使用 dev 表示生产环境, test 表示测试环境, pro 表示上线运行环境

然后在一个公共的配置文件中标识清楚当前项目使用的是哪个配置文件(运行在哪个环境下)
在这里插入图片描述


总结

SpringBoot 提供了 properties 和 yml 这两种配置文件格式, 前者语法格式为 key=value , 后者语法格式为 key冒号空格value, 这两种格式都支持自定义配置项

properties 和 yml 的一般配置项使用 @Value(${key值}) 的方式读取对应的 value, yml 中的类或者集合配置项, 使用 @ConfigurationProperties(“类或集合的名称”)

以上就是本篇的所有内容了, 如果本篇对你有帮助,请点赞收藏支持一下,小手一抖就是对作者莫大的鼓励啦😋😋😋~


上山总比下山辛苦
下篇文章见

在这里插入图片描述

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灵魂相契的树

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值