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

SpringBoot配置文件

SpringBoot配置文件


文章目录

  • SpringBoot配置文件
  • 配置文件的作用
  • 配置文件格式
    • 特殊说明
  • properties配置文件说明
    • 基本语法
    • 读取文件
    • 缺点分析
  • yml配置文件说明
    • 基本语法
      • 键值对
      • 数组(列表)
      • 对象(映射)
      • 布尔值
      • 空值
      • 字符串
      • 注释
      • 多行字符串
    • 读取文件
    • 补充:@ConfigurationProperties
  • properties vs yml(yaml)


配置文件的作用

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

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

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

配置文件格式

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

  • .properties
  • .yml

如下图所示:

在这里插入图片描述

  • application.properties 是默认创建的配置文件格式。而 application.yml(或 application.yaml)通常需要开发者根据需求自行创建

特殊说明

  1. 理论上讲 properties 可以和 yml 一起存在于一个项目当中,当 properties 和 yml 一起存在一个项目中时,如果配置文件中出现了同样的配置,比如 properties 和 yml 中都配置了“server.port”,那么这个时候会以 properties 中的配置为主,也就是 .properties 配置文件的优先级最高,但加载完 .properties 文件之后,也会加载 .yml 文件的配置信息
  2. 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取一种统一的配置文件格式,这样可以更好的维护(降低故障率)。这就好像连锁店的服饰一样,不管是老款的服装还是新款的服装,一定要统一了才好看

properties配置文件说明

  • properties配置文件是最早的配置文件格式,也是创建Spring项目默认的配置文件

基本语法

  • 在.properties文件中,每行代表一个键值对,格式为 键=值 ,等号两边不能有空格(虽然部分情况下空格不影响读取,但不建议添加)
# 配置服务器端口
server.port=8080
# 配置应用名称
spring.application.name=my - spring - boot - app

读取文件

  • 假如想读取properties配置文件中的内容,可以使用@Value注解来实现
  • @Value注解使用“${}”,进行读取
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class ConfigReader {// 读取 server.port 属性@Value("${server.port}")private int serverPort;// 读取自定义属性 app.name@Value("${app.name}")private String appName;public void printConfig() {System.out.println("Server Port: " + serverPort);System.out.println("App Name: " + appName);}
}

缺点分析

.properties文件作为Java项目(尤其是Spring Boot等框架)常用的配置格式,存在以下核心缺点:

  • 可读性欠佳:无清晰层级结构,配置多且有层级时,难以直观体现数据关联,不如.yml通过缩进展现层次清晰。
  • 复杂配置维护难:配置项增多时,冗长杂乱,查找、修改不便;且无内置模块化机制,不同模块配置难有效分组隔离。

yml配置文件说明

  • yml 是 YAML 的缩写,它的全称 Yet Another Markup Language 翻译成中文就是“另一种标记语言”
  • yml 是一个可读性高,易于理解,用来表达数据序列化的格式。它的语法和其他高级语言类似,并且可以简单表达清单(数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等
  • yml 最大的优势是可以跨语言,不止是 Java 中可以使用,golang、python 都可以使用 yaml 作为配置文件

基本语法

YAML(YAML Ain’t Markup Language,即 YAML 不是标记语言)是一种可读性高、用来表达数据序列化的格式,在配置文件中被广泛使用。以下是 YAML 的基本语法:

键值对

  • 语法格式键: 值,注意冒号后面需要紧跟一个空格。
  • 示例
server:port: 8080host: localhost

上述示例中,server 是一个键,它的值是一个包含 porthost 两个键值对的对象 。

数组(列表)

  • 短横线写法:使用短横线 - 加一个空格来表示数组元素。
  • 示例
fruits:- apple- banana- orange

fruits 是键,它的值是一个包含 applebananaorange 三个元素的数组。

  • 方括号写法:也可以使用方括号 [] 来定义数组,元素之间用逗号分隔。
numbers: [1, 2, 3, 4, 5]

对象(映射)

  • 语法格式:通过缩进表示层级关系,每个子键值对相对于父键值对有一定的缩进。
  • 示例
person:name: Johnage: 30address:city: New Yorkstreet: 123 Main St

person 是一个键,其值是一个对象,这个对象包含 nameageaddress 三个键值对,而 address 本身又是一个包含 citystreet 键值对的对象。

布尔值

  • 写法truefalse,注意大小写。
  • 示例
enabled: true
debugMode: false

空值

  • 写法:使用 null 表示空值,也可以用 ~ 来表示。
  • 示例
description: null
optionalValue: ~

字符串

  • 普通写法:直接写值,不需要引号。
message: Hello, World!
  • 单引号写法:单引号内的特殊字符不会被转义。
string1: 'This is a \n newline character'  # 输出会包含 \n
  • 双引号写法:双引号内的特殊字符会被转义。
string2: "This is a \n newline character"  # 输出会换行

注释

  • 语法格式:使用 # 开头,直到行末的内容都是注释。
  • 示例
# 这是一个注释
server:port: 8080  # 配置服务器端口

多行字符串

  • 字面量风格(|:保留换行符。
text: |This is a multi-linestring. It will keep theline breaks as they are.
  • 折叠风格(>:折叠换行符,连续的换行符会被合并为一个空格。
text: >This is a multi-linestring. Multiple line breakswill be collapsed.

在Spring Boot项目中,application.yml 是常用的配置文件,通过上述语法可以方便地配置各种参数,如数据库连接、服务端口等信息

读取文件

  • 与properties配置文件读取格式基本一致
  • 都是使用@Value注解
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class YmlConfigReader {// 读取 server.port@Value("${server.port}")private int port;// 读取 app.name@Value("${app.name}")private String appName;public void printConfig() {System.out.println("端口: " + port);System.out.println("应用名称: " + appName);}
}

补充:@ConfigurationProperties

  • @ConfigurationProperties:适用于配置一组相关的属性,如数据库连接配置、第三方服务的参数配置等场景,能够提高代码的可读性和可维护性
db:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverimport org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "db")
public class DbConfig {private String url;private String username;private String password;private String driverClassName;// 省略getter和setter
}

properties vs yml(yaml)

  • properties 是以 key=value 的形式配置的键值类型的配置文件,而 yml 使用的是类似 json 格式的树形配置方式进行配置的,yml 层级之间使用换行缩进的方式配置,key 和 value 之间使用“:”英文冒号加空格的方式设置,并且空格不可省略
  • properties 为早期并且默认的配置文件格式,但其配置存在一定的冗余数据,使用 yml 可以很好的解决数据冗余的问题
  • yml 通用性更好,支持更多语言,如 Java、Go、Python 等,如果是云服务器开发,可以使用一份配置文件作为 Java 和 Go 的共同配置文件
  • yml 虽然可以和 properties 共存,但一个项目中建议使用统一的配置类型文件
http://www.xdnf.cn/news/20246.html

相关文章:

  • 【CSP-S】数据结构 ST 表详解
  • 植物大战僵尸融合版安装包,下载安装教程
  • PCDN工作原理的详细步骤
  • Netty从0到1系列之EventLoopGroup
  • Kafka面试精讲 Day 10:事务机制与幂等性保证
  • CUDA默认流的同步行为
  • 项目升级--kafka消息队列的应用
  • 状压 dp --- 数据范围小
  • 雪球科技Java开发工程师笔试题
  • happen-before原则
  • WSL Ubuntu Docker 代理自动配置教程
  • LeetCode 139. 单词拆分 - 动态规划解法详解
  • 【软考架构】第二章 计算机系统基础知识:计算机网络
  • 主数据系统是否对于企业是必需的?
  • 最大似然估计:损失函数的底层数学原理
  • 基本数据类型和包装类的区别?
  • 2025年大数据专业人士认证发展路径分析
  • MySQL运维补充
  • 【目录-判断】鸿蒙HarmonyOS开发者基础
  • 敏捷scrum管理实战经验总结
  • 贪心算法应用:化工反应器调度问题详解
  • 【LLIE专题】SIED:看穿0.0001lux的极致黑暗
  • NPU边缘推理识物系统
  • 懒加载的概念
  • 新能源风口正劲,“充电第一股”能链智电为何掉队?
  • 操作系统启动过程详解
  • Coze源码分析-资源库-删除插件-前端源码-核心组件实现
  • 03-生产问题-慢SQL-20250926
  • 机器人控制器开发(导航算法——导航栈关联坐标系)
  • 创客匠人:什么是“好的创始人IP”