【Java EE】Spring Boot 配置文件全面详解

是时候为Spring Boot 3.0做准备了 2018年2月28日Spring Boot进入2.0时代,距今已经超过4年了。2022 年11月Spring Boot 3.0将正式发布,它将基于Spring Framework 6.0,并且需要 Java 17 或更高版本,同时它也将是Jakarta EE 9的第一个Spring Boot版本。还有六个月的时间留给开发者来过渡到Spring Boot 3.0,今天将告诉你一些方法,以便于将来快速迁移到3.0。Java 17将是继Java 8以来最重要的LTS版本,是Java社区八年努力的成果。包含了很多重 阅读详情

目录

1. 配置文件概述

1.1 什么是配置文件?

​编辑1.2 Spring Boot 配置文件的作用

2. 配置文件的格式与优先级

2.1 支持的格式

2.2 多文件优先级与冲突规则

3. Properties 配置文件详解

3.1 基本语法

3.2 读取配置

3.3 缺点分析

4. YAML 配置文件详解

4.1 基本语法

4.2 配置不同类型的数据

4.2.1 普通值(数字、字符串)

4.2.2 对象 (Map)

4.2.3 数组 / List

4.2.4 Map

4.3 YAML 的优缺点

5. 对比


1. 配置文件概述

1.1 什么是配置文件?

配置文件是用于存储应用程序配置信息的文件,它将可能会改变的参数从程序代码中分离出来,实现配置与代码的分离。这解决了硬编码​(将数据直接写入源代码)带来的问题,使应用程序无需重新编译即可适应不同的运行环境。

​硬编码 vs 配置化 对比图:​​

1.2 Spring Boot 配置文件的作用

Spring Boot 配置文件是其约定优于配置理念的核心体现,它规范化了框架和集成的第三方库的配置方式。主要作用包括:

  • ​服务器配置​:如修改内嵌 Tomcat 端口号 (server.port)。

  • ​数据源配置​:如配置数据库连接 URL、用户名、密码 (spring.datasource.url)。

  • ​外部密钥管理​:如配置调用第三方 API 的密钥。

  • ​日志管理​:配置日志输出级别和格式。

2. 配置文件的格式与优先级

2.1 支持的格式

Spring Boot 默认支持并自动加载 classpath下(通常是 src/main/resources目录)的三种配置文件:

  1. ​application.properties​ (主流,键值对格式)

  2. ​application.yml​ (主流,树形结构格式,YAML 的简写)

  3. ​application.yaml​ (与 .yml功能完全相同)

​项目资源目录结构图:​​

src/main/resources/
├── static/          # 静态资源(js, css, images)
├── templates/       # 模板文件(Thymeleaf, Freemarker)
├── application.properties
└── application.yml   # 最常用的两种配置文件

2.2 多文件优先级与冲突规则

当一个项目中存在多个配置文件时,Spring Boot 有一套清晰的加载和优先级规则。

​配置文件加载优先级与共存关系示意图:​​

​结论​:虽然支持共存,但强烈建议在项目中只使用一种配置文件格式​(目前 .yml更为流行),以降低维护复杂度。

3. Properties 配置文件详解

3.1 基本语法

.properties文件采用简单的键值对格式。

  • ​语法​:key = value或 key: value

  • ​注释​:使用 #开头

# 配置服务器端口
server.port=9090

# 配置数据库连接
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mydb
spring.datasource.username=root
spring.datasource.password=123456

# 自定义配置
myapp.name=My SpringBoot Application

3.2 读取配置

在 Spring 管理的 Bean(如 @Controller, @Service, @Component)中,使用 @Value注解读取。

@RestController
public class MyController {

    // 使用 @Value 注解注入配置值
    @Value("${myapp.name}")
    private String appName;

    @Value("${server.port}")
    private Integer port;

    @GetMapping("/info")
    public String getInfo() {
        return "Application: " + appName + " is running on port: " + port;
    }
}

访问 http://localhost:9090/info将返回:Application: My SpringBoot Application is running on port: 9090。

3.3 缺点分析

.properties格式在配置具有层次结构的数据时,会出现大量重复的前缀,导致文件冗长。

spring.datasource.url = ...
spring.datasource.username = ...
spring.datasource.password = ...
spring.datasource.driver-class-name = ...
# 大量重复的 'spring.datasource.'

4. YAML 配置文件详解

YAML (YAML Ain't Markup Language) 是一种人性化的数据序列化标准,层次清晰,大大减少了配置中的冗余信息。

4.1 基本语法

  • ​语法​:key: value(注意:冒号后面必须有一个空格)

  • ​层次​:使用缩进表示层级关系(不能用 Tab 键,只能用空格)。

​等价的 YAML 配置:​​

# 服务器配置
server:
  port: 9090

# 数据源配置
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mydb
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

# 自定义配置
myapp:
  name: My SpringBoot Application

4.2 配置不同类型的数据

4.2.1 普通值(数字、字符串)
my:
  value: 42
  string: Hello World
  string-with-quotes: 'Hello \n World'  # 单引号:转义特殊字符,输出\n
  string-with-double-quotes: "Hello \n World" # 双引号:不转义,输出换行
4.2.2 对象 (Map)
# 写法一:块样式
student:
  id: 1
  name: John Doe
  age: 18

# 写法二:行内样式(等同于上式)
student: {id: 1, name: John Doe, age: 18}

​读取对象配置​:需要使用 @ConfigurationProperties注解,而不是 @Value。

  1. ​定义配置类​:

    import lombok.Data;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    @Data
    @Component
    @ConfigurationProperties(prefix = "student") // 前缀绑定
    public class StudentProperties {
        private Integer id;
        private String name;
        private Integer age;
    }
  2. ​在Controller中注入使用​:

    @RestController
    public class StudentController {
    
        @Autowired
        private StudentProperties student;
    
        @GetMapping("/student")
        public String getStudent() {
            return student.toString(); // 输出: StudentProperties(id=1, name=John Doe, age=18)
        }
    }
4.2.3 数组 / List
# 写法一:块样式
fruits:
  - Apple
  - Banana
  - Orange

# 写法二:行内样式
fruits: [Apple, Banana, Orange]

​配置类​:

@ConfigurationProperties(prefix = "my")
@Data
@Component
public class MyListConfig {
    private List<String> fruits;
}
4.2.4 Map
# 写法一:块样式
maptypes:
  map:
    k1: v1
    k2: v2
    k3: v3

# 写法二:行内样式
maptypes: {map: {k1: v1, k2: v2, k3: v3}}

​配置类​:

@ConfigurationProperties(prefix = "maptypes")
@Data
@Component
public class MyMapConfig {
    private Map<String, String> map;
}

4.3 YAML 的优缺点

优点

缺点

✅ ​可读性高​:层次结构清晰,易于理解

❌ ​格式严格​:依赖缩进,空格错误会导致解析失败

✅ ​无冗余​:通过层级避免了 key 的重复前缀

❌ ​不适合复杂配置​:过于复杂的嵌套配置可读性会变差

✅ ​支持丰富数据类型​:天然支持对象、集合等

5. 对比

特性

.properties

.yml/ .yaml

​语法​

键值对 (key=value)

树形结构 (key: value)

​可读性​

较低,尤其是复杂配置

​高,层次清晰

​冗余度​

​高,key 重复严重

​低,无重复前缀

​数据类型​

主要支持字符串

支持丰富(字符串、对象、数组、集合等)

​学习成本​

低

中等(需熟悉缩进规则)

​适用场景​

简单、小型的项目

​中大型项目,微服务架构

注意事项

  1. ​统一格式​:在一个项目中选定一种配置文件格式并坚持使用,推荐 ​YAML​ (.yml)。

  2. ​配置分组​:对于自定义的复杂配置,使用 @ConfigurationProperties进行分组绑定,而不是散落地使用 @Value。

  3. ​多环境配置​:使用 application-{profile}.yml(如 application-dev.yml, application-prod.yml)来管理不同环境的配置,并通过 spring.profiles.active属性激活。

从javax到Jakarta:Java EE迁移的实战指南与最佳实践 本文提供了从javax迁移到Jakarta EE的完整实战指南。针对Java EE技术栈的重大变革,文章详细阐述了迁移的必要性、评估规划方法、自动化工具使用、依赖更新策略以及常见问题的解决方案,帮助开发者高效、平稳地完成项目升级,拥抱现代Java企业开发生态。 阅读详情

相关推荐

Label Studio 图像分割自动标注接入教程:从模型预测到一键上传 Predictions

这篇文章详细介绍了如何使用Label Studio进行图像分割任务的自动标注流程。主要内容包括: 环境准备:安装Label Studio和模型推理依赖 项目配置:启动Label Studio服务,创建项目并配置BrushLabels标注界面 数据准备:导入待标注图片,获取API访问凭证 模型推理:运行训练好的分割模型生成预测mask 结果上传:将预测结果转换为Label Studio格式并通过API上传为Predictions 文章提供了完整的操作指南,包括: 详细的命令行参数说明 推荐的项目目录结构 标注

. 451

SpringBoot项目配置文件详解

如果你不想复制文件,而是直接指定 application.yml 文件的位置,你可以通过 spring.config.location 参数在 pom.xml 中配置 application.yml 文件的路径。在 Spring Boot 项目中,application.yml 文件的默认位置是 src/main/resources,但你可以通过在 pom.xml 文件中配置插件或属性来指定 application.yml 文件的自定义位置。选择合适的方式取决于你的项目需求。,与 .yaml 文件相同。

qq_41765777的博客 2040

【Java完整版 面试必备】Leetcode Top100题目和答案-滑动窗口篇

【Java完整版 面试必备】Leetcode Top100题目和答案-滑动窗口篇

weixin_43298211的博客 2245

SpringBoot 配置文件

SpringBoot 配置文件

2401_83595513的博客 1917

【DaVinci Developer专题】-23-IDT高阶应用:结构体类型的数组

共8页 目录 1 创建一个Record IDT 2 创建一个Array IDT 3 创建一个S/R Port Interface 4 创建一个Constant 5 导入CFG生成代码的总结 6 结尾 <--返回「实战篇」博文-总目录--> <--返回「Autosar从入门到精通-实战篇」专栏主页--> 关键字: 缩略语/术语 含义 DEV DaVinci Developer .

「汽车电子助手」的博客 1667

基于深度确定性策略梯度的永磁同步电机强化学习控制方法

本文提出了一种基于深度确定性策略梯度(DDPG)的永磁同步电机(PMSM)电流内环智能控制方法。首先建立了PMSM在d-q坐标系下的数学模型,分析了传统矢量控制双闭环系统中PI控制器的局限性。针对电流内环控制问题,设计了包含电流跟踪误差、转速信息和历史控制量的状态空间,将电压输出作为动作空间,并构建了兼顾跟踪精度和响应速度的奖励函数。通过DDPG算法训练智能体,使其能够自适应调整控制策略。仿真结果表明,与固定参数的PI控制器相比,DDPG控制器在动态响应速度和抗干扰能力方面具有明显优势,为PMSM高性能控制

huanghm88的专栏 103

第3章 Spring Boot项目配置详解

Spring Boot 入门系列教程

陈小房的自我修炼 2872

图机器学习(7)——图神经网络 (Graph Neural Network, GNN)

图神经网络 (Graph Neural Network, GNN) 是一类专门处理图结构数据的深度学习方法。这类方法也被称为几何深度学习 (geometric deep learning),在社交网络分析、计算机图形学等众多领域正受到日益广泛的关注。在本节中,我们介绍了 GNN 的核心原理,将卷积等经典深度学习范式拓展至非欧几里得图空间,实现了局部结构与全局特征的层次化提取。

盼小辉丶的博客 1万+

【Spring Boot】SpringBoot 配置文件详解

文章目录1. 配置文件的作用2. 配置文件的格式3. properties 配置文件说明3.1 properties 基本语法3.2 properties 配置缺点分析4. yml 配置文件说明4.1 yml 基本语法4.2 yml 配置简单的数据类型及 null4.3 yml 配置对象4.4 yml 配置 list 集合5. properties 和 yml 的总结6. Spring Boot 读取配置文件的方法6.1 使用 @Value 读取配置文件6.2 使用 @ConfigurationProper

吞吞吐吐大魔王的博客 6521

基于深度学习的活体人脸检测系统:YOLOv5、YOLOv6、YOLOv7、YOLOv8实现与UI界面设计

本博客详细介绍了如何基于YOLOv5、YOLOv6、YOLOv7、YOLOv8模型实现一个完整的活体人脸检测系统。系统包括数据集准备、模型训练、UI界面设计以及实时检测功能的实现。通过YOLO系列模型的应用,我们能够高效、准确地进行人脸检测和活体验证。未来,随着YOLOv9和其他新一代目标检测模型的出现,我们可以进一步提高检测精度和速度。此外,集成更多的传感器数据(如深度传感器、红外线传感器)可以使活体检测系统更加安全和稳定。

YOLO 540

1小时读完100篇文献的正确打开方式

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。文献阅读与整理一般都是最先开始、却也最容易被低估的一步。很多学术同仁一开始就陷入越读越多、越读越乱的状态:论文下载了一大堆,但真正能用来支撑自己观点的内容却始终难以提炼出来。一方面,我们需要通过文献了解该研究领域的整体发展脉络,把握当前学界已经讨论到什么程度;

智能AI让学术科研更容易 49

Spring Boot之配置文件详解

Spring Boot之配置文件详解 Spring Boot 提供了大量的自动配置,极大地简化了spring 应用的开发过程,当用户创建了一个 Spring Boot 项目后,即使不进行任何配置,该项目也能顺利的运行起来。当然,用户也可以根据自身的需要使用配置文件修改 Spring Boot 的默认设置。 SpringBoot 默认使用以下 2 种全局的配置文件,其文件名是固定的。 application.properties application.yml 其中,application.yml 是一种

yinyin_xiao的博客 2222

SPMI总线协议(一)

系统电源管理接口( System Power Management Interface简称SPMI)是一种双线串行接口,用于连接片上系统(SoC)处理器系统的集成电源控制器(PC)与一个或多个电源管理集成电路(PMIC)电压调节系统。SPMI 使系统能够使用单个 SPMI 总线动态调整 SoC 内部电压域的电源和衬底偏置电压。移动设备和其他便携式设计正日益采用系SPMI)协议,实现多主多从系统,根据实时系统需求监测和动态控制供电电压。设计人员可以在系统级实现更低的功率。

qflook的博客 880

【Java EE】Spring Boot配置文件

文章摘要: SpringBoot配置文件解决了硬编码带来的维护问题,支持properties和yml两种格式。yml通过树形缩进结构消除重复前缀,支持对象、集合等复杂数据类型,但格式要求严格。通过@Value和@ConfigurationProperties注解可读取配置,后者适合批量绑定。案例演示了如何结合Hutool工具和yml配置实现图形验证码功能,将验证码参数抽离到配置文件统一管理。

记录了从0学习Java技术栈的日常 306

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java EE --- Spring Boot 配置文件

Spring Boot项目没有配置信息, 就不能连接和操作数据库, 甚至不能保存可以用于排查问题的关键日志. 所以配置文件非常重要.properties 是以 这种格式配置的. 配置文件的注释信息使用 “#”读取配置文件的内容, 可以使用 注解来实现 注解使用 的格式读取. yml 是 YMAL 是缩写, 它的全称是 , 译为 另一种标记语言.yml 是树形结构的配置文件, 它的基础语法是 , 这里的后面跟着一个空格. 1.4.2 yml 使用进阶 查看一段代码 读取yml中的这段代码 运行结果:

wwzzzzzzzzzzzzz的博客 641

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【Java成王之路】EE进阶第七篇 Spring Boot 配置文件

1、properties 是以 key=value 的形式配置的键值类型的配置⽂件.⽽ yml 使⽤的是类似 json 格式的树形配置⽅式进⾏配置的.yml 层级之间使⽤换⾏缩进的⽅式配置,key 和 value 之间使⽤“: ”(英⽂)冒号加空格的⽅式设置,并且空格不可省略。2、properties 为早期并且默认的配置⽂件格式,但其配置存在⼀定的冗余数据,使⽤ yml 可以很好的解决数据冗余的问题。

m0_64397675的博客 248

[Java EE] Spring 配置 和 日志

文章摘要: 本文系统介绍了SpringBoot配置文件和日志系统两个核心功能。配置文件部分详细讲解了properties和yml两种格式的使用方法,包括基本配置、对象/集合/Map的读取,并分析了yml格式的优缺点。日志系统部分阐述了日志的作用、SLF4J框架的门面模式设计、日志级别分类及使用、日志格式配置、持久化存储与分割策略。通过代码示例演示了如何在实际项目中应用这些功能,为开发者提供了全面的配置管理和日志记录解决方案,帮助提升项目的可维护性和问题排查效率。

Miraitowa_cheems的博客 1069

Spring Boot 部署与服务配置

spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动。其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat)。当然你也可以将项目打包成war包,放到独立的web容器中(Tomcat、weblogic等等),当然在此之前你要对程序入口做简单调整。 项目构建我们使用Maven或Gradle,这将使项目依赖、jar包管理

秀才的专栏 2468

JAVA EE学习了关于Spring Boot

文件用于存储应用程序的各种配置信息,如数据库连接、端口设置、日志级别、缓存配置等。学习到了一点常用的注解:@SpringBootApplication,@RestController,@Controller,@Service,@Bean。Spring Boot 支持多环境配置,开发者可以为不同的环境(如开发环境、测试环境、生产环境)创建不同的配置文件。首先安装相关的软件配置环境变量后,点开IntelliJ IDEA,在左侧生成器里,有一个Spring Boot,学习了解这个。文件夹、项目根目录、类路径。

m0_63635426的博客 423

SpringBoot的配置项

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34355715的博客 122

Spring Boot 3.0升级指南:从JavaEE到Jakarta EE的平滑迁移实战

本文提供了Spring Boot 3.0升级的实战指南,重点阐述了从JavaEE平滑迁移至Jakarta EE的完整路径。文章详细解析了包名变更背后的原因,并给出了依赖管理更新、自动化包名替换工具使用以及兼容性疑难问题的具体解决方案,帮助开发者高效完成迁移,拥抱新一代技术栈。

w7x8y9z的博客 211

Spring Boot 配置

目录(?)[-] 一内嵌 Server 配置二部署到JavaEE容器三使用Profile区分环境四指定外部的配置文件五创建一个Linux 应用的sh脚本六使用Linux服务的方式启动停止重启 Spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动。其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat)。当然你也

qq_40596244的博客 302

十六、Spring Boot 部署与服务配置

springBoot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动。其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat)。当然你也可以将项目打包成war包,放到独立的web容器中(Tomcat、weblogic等等),当然在此之前你要对程序入口做简单调整。 项目构建我们使用Maven或Gradle,这将使项目依赖、jar包管理、以及打...

weixin_30662109的博客 91
上一篇: 【Java EE】全面详解 Spring IoC & DI
下一篇: 【java EE】Spring Boot 日志系统全面详解
Z_z在努力
博客等级 码龄3年 755粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值