当前位置: 首页 > news >正文

SpringBoot学习(properties、yml(主流)、yaml格式配置文件)(读取yml配置文件的3种方式)(详解)

目录

一、SpringBoot配置文件详解。

1.1配置文件简介。

1.2配置文件分类。(3种配置文件格式)

<1>application.properties(properties格式)。

<2>application.yml(yml格式)。

<3>application.yaml(yaml格式)。

1.3三种格式配置文件的优先级。

1.4yml文件。

<1>具体语法格式要求。

<2>常见数据的书写格式。

<3>普通数组书写格式。

<4>对象数组书写格式。

1.5读取yml文件中的数据。

<1>读取单一数据。(@Value)

<2>读取全部数据。(Environment对象)

<3>读取自定义对象数据。

1.6yaml文件中的数据引用。

1.7yaml配置随机值。

1.8多环境开发。(重点)

<1>yaml 单文件版。

<2>yaml 多文件版。

<3>properties 多文件版。


一、SpringBoot配置文件详解。

1.1配置文件简介。
  • 覆盖SpringBoot工程的默认配置,并修改成自己所设定的配置文件。
  • 配置文件中具体能够配置什么内容?ApplicationProperties官网链接附上:Common Application Properties :: Spring Boot
1.2配置文件分类。(3种配置文件格式)
  • 就以简单配置修改Tomcat默认启动端口号(8080)为例
  • 注意:yml 和 yaml 这两种文件扩展名本质上并无区别。它们都用于表示 YAML(YAML Ain't Markup Language)格式的文件。

<1>application.properties(properties格式)。
server.port=8090


<2>application.yml(yml格式)。
server:port: 9090


<3>application.yaml(yaml格式)。
server:port: 9091

1.3三种格式配置文件的优先级。
  •  优先级:application.properties  >  application.yml  >  application.yaml
  • 注意每个配置文件中的项都会生效。只不过如果多个配置文件中有相同类型的配置时:优先级高的文件覆盖优先级的文件中的配置。如果配置项不同的话,所有的配置项都会生效

  • 测试如下。
  • application.properties配置文件。


  • application.yml配置文件。

  • application.yaml配置文件。


1.4yml文件。
  • SpringBoot配置文件主流格式:yml结尾的配置文件格式。并且在书写该类配置文件时可以通过提示的形式加载正确的格式。
  • YAML(YAML Ain't Markup Language),一种数据序列化格式。具有容易阅读、容易与脚本语言交互、以数据为核心,重数据轻格式的特点。常见的文件扩展名有两种:yml格式(主流)、yaml格式

<1>具体语法格式要求。
  1. 大小写敏感

  2. 属性层级关系使用多行描述,每行结尾使用冒号结束。

  3. 使用缩进表示层级关系,同层级左侧对齐

  4. 属性值前面必须添加空格。(属性名与属性值之间使用“冒号+空格”作为分隔)

  5. “#”表示注释。


<2>常见数据的书写格式。
  • 布尔值在 YAML 里不区分大小写,TRUE、true、True、FALSE、false、False 都能被正确解析为布尔类型。
is_active1: TRUE
is_active2: false 
  • 浮点数支持常规的小数表示形式,也支持科学计数法。
float1: 3.14
float2: 6.8523015e+5
  • 整数支持十进制、二进制、八进制和十六进制的表示方式。要注意的是,二进制数以 0b 开头,八进制数以 0o 开头,十六进制数以 0x 开头。
int_decimal: 123  # 代表十进制整数123
int_binary: 0b1010_0111_0100_1010_1110  # 代表二进制整数,0b表示这是二进制数,十进制数是43498
int_octal: 0o755  # 代表八进制整数,0o表示这是八进制数,十进制数是493
int_hexadecimal: 0xFF  # 代表十六进制整数,0x表示这是十六进制数,十进制数是255
  • 在 YAML 中,通常用 ~ 来表示空值,也可以使用 null 关键字
empty_value1: ~
empty_value2: null
  • 字符串可以直接书写。若包含特殊字符,就需要用单引号或者双引号包裹双引号支持转义字符,单引号则不支持
string1: HelloWorld  # 这是一个直接书写的字符串,没有使用引号包裹,适用于字符串中不包含特殊字符(如空格、特殊标点等)的情况,该字符串的值为"HelloWorld"。string2: "Hello World"  # 使用双引号包裹的字符串,可用于包含空格等特殊字符的情况。双引号内的特殊字符会被正常解析,这里字符串的值为"Hello World"。string3: 'It''s a nice day.'  # 这是一个使用单引号包裹的字符串。单引号内的字符会按字面意思解析,不会进行转义。为了表示单引号字符,需要使用两个连续的单引号('')来表示一个单引号,该字符串的值为"It's a nice day."。string4: "It's a \"nice\" day."  # 这是一个使用双引号包裹的字符串。双引号内支持转义字符,这里使用反斜杠(\)对单引号(')和双引号(")进行转义,使得它们能作为普通字符存在于字符串中,该字符串的值为"It's a \"nice\" day."。
  • 日期必须要使用 yyyy-MM-dd 格式
date: 2018-02-17
  • 日期和时间之间用 T 连接时区用 + 或者 - 表示
datetime: 2018-02-17T15:02:31+08:00#2018-02-17:表示日期,即 2018 年 2 月 17 日。
#T:是日期和时间之间的分隔符,是 ISO 8601 标准中规定的表示方法。
#15:02:31:表示时间,即下午 3 点 2 分 31 秒。
#+08:00:表示时区,这里是东八区。说明这个时间是基于东八区的时间,也就是北京时间。

<3>普通数组书写格式。
  • 在 YAML 里,普通数组可在属性名下方用减号(-)作为数据起始符号,每个数据占一行,减号与数据之间用空格分隔
subject:- java- mysql- spring
  • 除了标准格式,YAML 还支持使用方括号 [] 来表示数组的缩略格式,元素之间用逗号分隔。
student:name: 张三age: 18subject:- Java- mysql- spring# 数组书写缩略格式loves: [男,女]

<4>对象数组书写格式。
  • 格式一:对象数组可以通过在属性名下方,每个对象使用减号开头,对象的属性以键值对形式缩进书写来表示
  • users是一个对象数组属性,包含两个对象。每个对象有 name 和 age 两个属性,通过缩进明确表示对象的层级关系。这种格式直观地展示了每个对象的结构,易于理解。
# 对象数组格式一
users:- name: Tomage: 4- name: Jerryage: 5
  • 另一种对象数组的表示方式是每个对象以减号开始单独占一行,对象的属性在减号下缩进书写
# 对象数组格式二
users1:-name: Tomage: 4-name: Jerryage: 5
  • 对象数组支持缩略格式。将所有对象用方括号括起来,每个对象也用大括号括起,对象内属性以键值对形式书写,属性间用逗号分隔。
# 对象数组缩略格式
users2: [ { name:Tom , age:4 } , { name:Jerry , age:5 } ]
1.5读取yml文件中的数据。
  • yml配置文件模拟数据。
jdbc:driverClassName: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/hylusername: rootpassword: 123456testArray:- jdbc1- jdbc2

  • 依赖项。
        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- optional 设置为 true 表示该依赖是可选的,不会传递到依赖项目中,避免冲突 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>

<1>读取单一数据。(@Value)
  • 使用@Value注解时,必须将其写在被 Spring 管控的 bean 的属性名上方。这样在 bean 初始化过程中,才能成功读取yaml配置文件里对应的单一数据 。
package com.hyl.pojo;import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
@Data
public class Jdbc {@Value("${jdbc.driverClassName}")private String driverClassName;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String username;@Value("${jdbc.password}")private String password;@Value("${jdbc.testArray[0]}")private String arr1;@Value("${jdbc.testArray[1]}")private String arr2;
}
package com.hyl;import com.hyl.pojo.Jdbc;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
public class JdbcTest {@Resourceprivate Jdbc jdbc;@Testpublic void testJdbc(){System.out.println(jdbc);}
}


<2>读取全部数据。(Environment对象)
  • 当数据量较大时,逐一读取数据较为繁琐。
  • Spring Boot 提供 Environment 对象,可借助自动装配注解 @Resource 将 yaml 文件中的所有数据封装其中获取属性时,通过 Environment 的 getProperty("?") 方法,传入属性名即可
package com.hyl;import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.env.Environment;@SpringBootTest
public class JdbcTest02 {@Resourceprivate Environment environment;@Testpublic void test(){System.out.println(environment.getProperty("jdbc.driverClassName"));System.out.println(environment.getProperty("jdbc.url"));System.out.println(environment.getProperty("jdbc.username"));System.out.println(environment.getProperty("jdbc.password"));System.out.println(environment.getProperty("jdbc.testArray[0]"));System.out.println(environment.getProperty("jdbc.testArray[1]"));}
}


<3>读取自定义对象数据。
  • 单一数据读取繁琐,全数据读取使用不便。
  • 而 Java 面向对象,常将一组数据封装为对象。Spring Boot 支持将 yaml 对象数据封装为 Java 对象
  • 具体操作是定义一个类。1、通过@Component使其成为 Spring 管理的 bean2、用@ConfigurationProperties(prefix = "xxx")指定加载 yaml 中对应前缀的配置信息
package com.hyl.pojo;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Data
@Component
@ConfigurationProperties(prefix = "jdbc")
public class Jdbc02 {private String driverClassName;private String url;private String username;private String password;private String[] testArray;
}
package com.hyl;import com.hyl.pojo.Jdbc02;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
public class JdbcTest04 {@Resourceprivate Jdbc02 jdbc02;@Testpublic void test(){System.out.println(jdbc02);}
}

1.6yaml文件中的数据引用。
  • yaml 文件中数据引用的方法。当存在多个具有相同前缀的数据时,可定义变量,通过${变量名}的格式引用变量,避免重复书写。
# 定义基础目录变量
baseDir: /home/user/app
# 定义不同用途的目录,通过引用baseDir变量来设置路径
dirs:dataDir: ${baseDir}/datalogDir: ${baseDir}/logstmpDir: ${baseDir}/temp
  • 书写含转义字符的字符串时,需用双引号包裹
filePath: "C:\\Users\\userName\\Documents\\file.txt"
menuPath: "system\\user\\settings"
1.7yaml配置随机值。
  • 在 Spring Boot 属性配置文件中,可利用 ${random} 语法来生成随机值
  • 支持生成 int 值、long 值、String 字符串等。通过不同后缀或参数限定,能获取特定范围或类型的随机值。
randomVals:# 生成随机字符串randomStr: ${random.value} # 生成随机int值randomInt: ${random.int} # 生成随机long值randomLong: ${random.long} # 生成0 - 9范围内的随机int值randomIntRange1: ${random.int(10)} # 生成12 - 65范围内的随机int值randomIntRange2: ${random.int[12,65]} 
1.8多环境开发。(重点)
  • 自己电脑上写的Java程序最终要放到别人的服务器上去运行。但每个计算机环境不一样,这就是多环境。开发环境—自己用的,测试环境—公司用的,生产环境——甲方。


<1>yaml 单文件版。
  • 通过spring.profiles.active指定激活环境,用“---”分隔不同环境配置。其中 Spring Boot 新版本推荐的配置写法变更。
# 配置激活当前为dev环境
spring:profiles:active: dev
---
# 生产环境配置
spring:profiles:active: prod
server:port: 8080
---
# 开发环境配置
spring:profiles:active: dev
server:port: 8081
---
# 测试环境配置
spring:profiles:active: test
server:port: 8082

<2>yaml 多文件版。
  • 主配置文件指定激活环境,各环境配置写在独立文件(命名规则为application-环境名.yml )中。
  • 公共配置放主配置文件,有区别的放环境配置文件

  • 主配置文件(指定激活 test 环境)。
spring:profiles:active: test

  • application-prod.yml (生产环境,端口 8080 )。
server:port: 8080
  • application-dev.yml (开发环境,端口 8081 )。
server:port: 8081
  • application-test.yml (测试环境,端口 8082 )。
server:port: 8082

<3>properties 多文件版。
  • Spring Boot 早期配置格式。主配置文件指定激活环境,环境配置文件按application-环境名.properties命名

  • 主配置文件(指定激活 prod 环境)。
spring.profiles.active=prod
  • application-prod.properties (生产环境,端口 8080 )。
server.port=8080
  • application-dev.properties (开发环境,端口 8081 )。
server.port=8081
  • application-test.properties (测试环境,端口 8082 )
server.port=8082

相关文章:

  • 使用Lean 4和C#进行数学定理证明与逻辑推理
  • 【前沿】成像“跨界”测量——扫焦光场成像
  • JVM之经典垃圾回收器
  • golang context源码
  • 目标检测中的混淆矩阵
  • GitHub Copilot在产品/安全团队中的应用实践:处理Markdown、自动化报告与电子表格、使用CLI命令等
  • 音视频元素
  • 【HFP】蓝牙HFP协议音频连接核心技术深度解析
  • 音视频小白系统入门课-2
  • 【AI部署】腾讯云GPU -—SadTalker的AI数字人访问web服务—未来之窗超算中心
  • hive的基础配置优化与数仓流程
  • Windows10,11账户管理,修改密码,创建帐户...
  • node.js 基础
  • python flask 项目部署
  • 在阿里云虚拟主机上启用WordPress伪静态
  • P2P用服务器运行所需的带宽资源
  • CAPL编程系列_02
  • 探索大语言模型(LLM):循环神经网络的深度解析与实战(RNN、LSTM 与 GRU)
  • linux 4.14内核jffs2文件系统不自动释放空间的bug
  • 6.数据手册解读—运算放大器(二)
  • 好未来:2025财年收入增长51%,下个财年提高整体盈利能力是首要任务
  • 中国海警登临铁线礁开展维权行动并展示五星红旗
  • 百位名人写“茶”字,莫言王蒙贾平凹都写了
  • “下一个高增长市场,还是中国”,龚正市长会见参加上海车展的国际企业高管
  • 特朗普激发加拿大爱国热情:大选提前投票人数创纪录,魁北克分离情绪被冲淡
  • 兰斯莫斯想在雅典卫城拍《拯救地球》,希腊当局:价值观不符