SpringBoot项目属性配置(application.properties、yml和yaml)

 更新时间:2025年08月01日 10:05:38   作者:香饽饽~、  
SpringBoot支持多种配置文件格式,包括application.properties、yml和yaml,application.properties是键值对结构,常用于简单配置,如设置服务器端口,yml和yaml文件格式相同,使用缩进表示层级,适合复杂配置,下面就来详细的介绍一下

简介

SpringBoot支持多种配置文件格式,包括application.properties、yml和yaml等。本文章将详细介绍这三种配置文件的内容格式和详细用法,以及在程序中如何对配置文件中的属性进行读取。文章内容若存在错误或需改进的地方,欢迎大家指正!若对操作有任何疑问欢迎留言!非常感谢!

一、SpringBoot默认配置文件

1、application.properties文件

该文件位于resources目录下,是随工程的创建而生成的一个空白文件(若没有可手动创建,必须保证名称和类型为application.properties),在这个文件中可以进行项目的配置。

2、文件内容要求:

  • 键值对结构,格式为key=value
  • 注释以#或者!开头
  • 列表或者数组的值使用逗号隔开
  • 使用点号 . 表示属性层级
  • 想看系统支持哪些配置可以在Spring官方查看,链接:Common Application Properties

以配置启动端口为例,SpringBoot项目默认的启动端口为8080,现在将这个端口配置为8888。如下,只需要在application.properties文件中配置server.port=8888即可。

二、yml或者yaml配置文件

1、简介

yml文件和yaml文件本质上是同一种文件格式,没有实质性的技术区别。.yaml是官方推荐的标准扩展名,.yml是因为早期Windows限制3字符扩展名而流行。无论使用哪个扩展名,文件内容都遵循相同的 YAML 规范。所以下面在介绍文件时,也不再区分二者。

因为yaml文件内容的层次感更强,内容更加清爽,一目了然。所以,在实际项目中大部分情况下是使用.yaml或者.yml作为配置文件,application.properties文件使用的频率就较低些。一般情况下,三者不会共存。

2、语法规则

  • 大小写敏感
  • 属性层级关系使用多行描述,每行结尾使用冒号结束
  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
  • 属性值前面添加空格(属性名与属性值之前使用冒号+空格作为分割)
  • # 表示注释
  • ${一级属性名.二级属性名... ...}表示属性引用
  • 使用引号包裹带有转义字符的字符串才可以生效
# 普通使用
name: demo
 
# 层级关系
user:
  name: zhangsan
  age: 18
 
# 数组/列表格式
list:
  - zhangsan
  - lisi
  - wangwu
# 数组/列表缩略格式
list2: [zhangsan, lisi, wangwu]
 
# 对象列表
users:
  - name: zhangsan
    age: 18
  - name: lisi
    age: 19
  - name: wangwu
    age: 20
# 对象列表缩略格式
users2: [{name:zhangsan, age:18},{name:lisi, age:19},{name:wangwu, age:20}]
 
# ---------- 部分补充 ----------
# TRUE,true,True,FALSE,false,False
boolean: TRUE
# 6.23542343e+5 支持科学计数法
float: 3.14
# 0b1010_0111_0100_1010_1110 支持二进制、八进制、十六进制
int: 123
# 使用 ~ 表示null
null: ~
# 字符串可以直接书写
string: HelloWorld
# 可以使用双引号包裹特殊字符
string2: "Hello\nWorld"
 
# 属性引用
baseUrl: "127.0.0.1"
tmp: ${baseUrl}:${server.port}}

3、配置文件加载优先级

当application.properties文件、yaml文件、yml文件三者共存时,文件中相同配置的加载优先级如下:

application.properties > yml > yaml

而三个文件中不同的配置就不存在加载优先级的问题,而是全部保留,也就是说三个文件的不同的属性都会被读到。

三、SpringBoot程序中读取配置文件属性的几种方式

1、使用@Value注解读取

程序中定义的属性名与配置文件中的属性名并没有强关联,也就是定义的时候无需强制保持一致。

使用@Value注解读取单个数据,属性名引用方式:${一级属性名.二级属性名... ...},只需要在大括号中加一个冒号然后写值就可以设置默认值:${一级属性名.二级属性名... ...:默认值}。

2、使用Environment类对象获取属性

使用@Autowired在类中注入Environment对象,然后使用getProperty方法接收配置文件中的属性名来获取属性值,可以进行非空判断来设置默认值。

3、自定义对象映射配置文件属性

(1)创建定义对象

注意:这里可能与听到的知识不太一样,可自行测试

配置项中的名称需要与实体类的set方法后的名称保持强一致。配置项名称时可以不与实体类中的属性名保持一致,因为一般情况下set/get方法后面的名称是和属性名一致的,比如自动生成或者使用lombok生成的方法,都是一致的,所以也会有配置项名必须属性名保持一致的说法。如果有特殊情况,那么只需要保证配置项中的名称需要与实体类的set方法后的名称强一致即可,与get方法、实体类名、实体属性名、set方法形参无关。

(2)将类交给Spring的IOC容器

这个地方有两种方式,注意只能使用其中一种,不可同时使用!

第一种方式:在自定义类上增加@Component注解,让当前的类直接注册成IOC的Bean。

第二种方式:在启动类上声明@EnableConfigurationProperties注解,并在指定属性值,这里的属性值如果只有一个类可以直接写,若是多个类可以使用数组形式。这种方式会自动将数组里面的类注册为Bean,好处在于在这里可以直观的观察到有哪些读取配置类。

(3)指定当前类加载的数据

在自定义类上面增加@ConfigurationProperties(prefix = "student")注解,并使用prefix属性指定配置文件中属性前缀。绑定前缀命名规范:仅能使用纯小写字母、数字、下划线作为合法的字符。

(4)示例

通过上面三部就已经完成了配置文件中的属性对自定义类属性的映射,下面是一个使用示例:

到此这篇关于SpringBoot项目属性配置(application.properties、yml和yaml)的文章就介绍到这了,更多相关SpringBoot 属性配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Java 并发编程中的锁机制示例详解

    Java 并发编程中的锁机制示例详解

    本文探讨了Java并发编程中的锁机制,包括锁的基本概念、Java中的锁类型如synchronized、ReentrantLock、ReadWriteLock、锁的优化策略以及如何避免死锁,文章强调了合理选择和优化锁使用对于提升程序并发性能的重要性,并提供了实际应用中的最佳实践,感兴趣的朋友一起看看吧
    2025-01-01
  • java多线程:基础详解

    java多线程:基础详解

    这篇文章主要介绍了java多线程编程实例,分享了几则多线程的实例代码,具有一定参考价值,加深多线程编程的理解还是很有帮助的,需要的朋友可以参考下。
    2021-08-08
  • mybatis中的mapper.xml使用循环语句

    mybatis中的mapper.xml使用循环语句

    这篇文章主要介绍了mybatis中的mapper.xml使用循环语句,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java中异或的深入讲解

    Java中异或的深入讲解

    这篇文章主要给大家介绍了关于Java中异或的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • 使用 Spring AI + Ollama 构建生成式 AI 应用的方法

    使用 Spring AI + Ollama 构建生成式 AI 应用的方法

    通过集成SpringBoot和Ollama,本文详细介绍了如何构建生成式AI应用,首先,介绍了AI大模型服务的两种实现方式,选择使用ollama进行部署,随后,通过SpringBoot+SpringAI来实现应用构建,本文为开发者提供了一个实用的指南,帮助他们快速入门生成式AI应用的开发
    2024-11-11
  • 深入探究Java中的类加载机制

    深入探究Java中的类加载机制

    这篇文章主要给大家介绍了关于Java中类加载机制的相关资料,JVM将类加载过程分为三个步骤:装载(Load)、链接(Link)和初始化(Initialize),本文通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-09-09
  • SpringBoot中的@ConfigurationProperties注解解析

    SpringBoot中的@ConfigurationProperties注解解析

    这篇文章主要介绍了SpringBoot中的@ConfigurationProperties注解解析,Spring源码中大量使用了ConfigurationProperties注解,通过与其他注解配合使用,能够实现Bean的按需配置,该注解可以放在类上,也可以放在方法上,需要的朋友可以参考下
    2023-11-11
  • Spring如何替换掉默认common-logging.jar

    Spring如何替换掉默认common-logging.jar

    这篇文章主要介绍了Spring如何替换掉默认common-logging.jar,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 浅谈Java线程Thread.join方法解析

    浅谈Java线程Thread.join方法解析

    本篇文章主要介绍了浅谈Java线程Thread.join方法解析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • MyBatis类型处理器TypeHandler的作用及说明

    MyBatis类型处理器TypeHandler的作用及说明

    这篇文章主要介绍了MyBatis类型处理器TypeHandler的作用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03

最新评论