Spring Boot 配置文件总结
前言
Spring Boot 中提供一个全局的配置文件:application.properties,这个配置文件的作用就是,允许我们通过这个配置文件去修改 Spring Boot 自动配置的默认值。
Spring Boot 支持两种格式的配置文件:application.properties 和 application.yml。
yml 等同于 yaml,写法看个人喜欢,我喜欢写成 application.yml
不同后缀不同写法
application.properties 和 application.yml ,它们的区别在于语法不同,但本质上是一样的。application.properties 使用键值对的方式来配置,而 application.yml 使用缩进和冒号的方式来配置。
properties
properties 作为后缀的配置文件,语法是这样的:key = value,如果有多级配置项,则是 first.second.third = value。
key=value
first.second.third=value
示例:
- 定义属性:
key=value
game.name=GTA5
这里的 key 和 game.name 都是属性名称,而 value 和 GTA5 是属性的值。
- 定义 List:
game.list=GTA5,NBA2K,AC
这里的 game.list 这个列表包含了 3 个元素。
- 定义 Map:
game.map.key1=value1
game.map.key2=value2
这里的 game.map 是一个 Map,这个 Map 包含了两个元素,key1 映射到 value1,key2 映射到 value2
- 引用已定义的属性:
game.name=GTA5
# 引用上面已定义的属性
great.game=${game.name}
yml (yaml)
yml 作为后缀的配置文件,语法是这样的:key: value。使用冒号代替等号,同时冒号后面需要跟上一个空格符,不可省略。
key: value
first:
second:
third: value
示例:
- 定义属性:
key: value
game:
name: GTA5
- 定义 List:
game:
list:
- GTA5
- NBA2K
- AC
- 定义 Map:
game:
map:
key1: value1
key2: value2
- 引用已定义的属性:
game:
name: GTA5
great:
game: @{game.name}
不同环境下切换不同的配置文件
一般项目中在不同环境下都有不同的配置,还是以这个 Tomcat 的端口号为例:
目前有 3 个环境,分别是开发环境、测试环境、生产环境。在开发环境下,端口号是 4790;测试环境下,端口号是 4791;生产环境下是 4792。
application-dev.yml
server:
port: 4790
application-test.yml
server:
port: 4791
application-prod.yml
server:
port: 4792
spring.profiles.active
现在,通过 spring.profiles.active 这个配置项,在 application.yml 中指定我们想要切换的配置文件,现在指定使用开发环境的配置文件:
# 指定使用 application-dev.yml 这个配置文件
spring:
profiles:
active: dev
启动 Spring Boot 应用,控制台输出:
2023-03-16 15:41:48.122 INFO 3356 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 4790 (http) with context path ''
指定使用测试环境下的配置文件:
# 指定使用 application-test.yml 这个配置文件
spring:
profiles:
active: test
启动 Spring Boot 应用,控制台输出:
2023-03-16 15:42:21.462 INFO 24548 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 4791 (http) with context path ''
同理,指定使用生产环境的配置文件也是一样的做法。
自定义的配置
在 Spring Boot 项目中,自定义配置是经常用到的,我目前体会到的自定义的配置的作用有一点:配置与代码解耦
下面,我们看看如何自定义配置,并使用自己自定义配置的值:
server:
port: 4790
# 自定义的配置
demo:
author: god23bin
description: 点个免费的赞,我能开心好久!
上面自定义了两个配置项,分别是 demo.author 和 demo.description,接着,如何在代码中使用这些配置好的值呢?
目前使用这些配置好的值(读取这些值),有以下几种方式:
- 使用
@Value - 使用
@ConfigurationProperties
@Value
我们写一个普通的 Java 类,使用 Spring 提供的 @Value 来读取这两个值:
@Data
@Component
public class DemoCustomConfig {
/**
* 通过 @Value 注解读取配置文件中的自定义配置项的值,使用 ${} 进行读取
**/
@Value("${demo.author}")
private String author;
@Value("${demo.description}")
private String description;
}
上面的代码中,我在类上使用了 @Data 和 @Component,@Data 是来自 Lombok 的,用于生成 getter 和 setter 方法,@Component 则将该类的实例对象交给 Spring 管理,接着在该类的两个属性上分别使用了 @Value 注解,通过 ${} 指定了我们要读取的配置项。
进行测试,我们写一个 Controller 判断我们的读取是否成功:
@RequestMapping("/demo")
@RestController
public class DemoController {
@Autowired
private DemoCustomConfig demoCustomConfig;
@GetMapping("/getCustomValue")
public ResponseEntity<String> getCustomValue() {
return ResponseEntity.ok(demoCustomConfig.getAuthor() + "说:" + demoCustomConfig.getDescription());
}
}
访问该接口:localhost:4790/demo/getCustomValue

@ConfigurationProperties
@ConfigurationProperties 注解,它可以将配置文件中的的值绑定到 Java Bean 中,也就是通过这个 Bean 可以读取到配置文件中配置的值,我们看看如何操作。
我们自定义一个用于读取配置文件中配置项的类:
@Data
@Component
@ConfigurationProperties("system.demo")
public class SystemCustomConfig {
private String name;
private String version;
}
上面的代码,主要使用了 @ConfigurationProperties 这个注解,并指定了前缀 system.demo,同时这个类有两个属性,name 和 version, 这样就相当于我们自定义了 system.demo.name 和 system.demo.version 这两个属性。
接着,我们就能在配置文件中写这两个我们自定义的配置项了:
server:
port: 4790
# 自定义的配置
system:
demo:
name: 超级系统
version: 1.0
写完这里的配置项,并不需要使用 @Value 去读取,因为使用了 @ConfigurationProperties 注解,Spring 已经帮我们搞定了配置的值的读取,至于它的实现原理,这里先不深究。
进行测试,依然通过写一个接口来测试我们通过:
@RequestMapping("/demo")
@RestController
public class DemoController {
@Autowired
private SystemCustomConfig systemCustomConfig;
@GetMapping("/getSystemVersion")
public ResponseEntity<String> getSystemVersion() {
return ResponseEntity.ok(systemCustomConfig.getName() + "版本:" + systemCustomConfig.getVersion());
}
}
访问该接口:localhost:4790/demo/getSystemVersion

关于自动提示
不过,目前有个问题就是,我们自己写了个 Java Bean 后,在配置文件中写配置项的时候并没有相关提示,这个就比较不友好,如果当我们自己写的配置想要给其他人用的话,别人都不知道有什么配置可以配。所以想要能像 Spring Boot 提供的配置提示一样的话,就需要引入下面的依赖:
<!-- 配置文件处理器,配置文件进行绑定就会有提示 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
spring-boot-configuration-processor是一个用于生成配置元数据的注解处理器。它会扫描使用@ConfigurationProperties注解的类和方法,来获取配置参数并生成配置元数据。生成的配置元数据可以用于 IDE 的自动补全和提示功能。

如果你引入了这个依赖并且重启该 Spring Boot 项目后,依旧没有提示的话,尝试开启 IDEA 中的 annotaion processing。

关于 Cannot resolve configuration property
对于我们自定义的配置,会出现这样的提示:Cannot resolve configuration property(无法处理自定义的配置属性),如下:

解决方式就是定义一下元数据,用元数据来描述这个属性。当我们移动到这个配置项上时,出现提示,我们直接点击 Define configuration key xxx 就可以帮我们生成一个关于配置的元数据文件。
additional-spring-configuration-metadata.json:
{
"properties": [
{
"name": "demo.author",
"type": "java.lang.String",
"description": "Demo的作者"
},
{
"name": "demo.description",
"type": "java.lang.String",
"description": "Demo的描述"
}
]
}
此时,还是一样,重启项目,如果黄色提示还是没有去除的话,这里建议重新用 Maven 进行一次 clean,接着重新编译整个项目,就可以了。于此同时,也具有了自动提示功能。

自定义配置文件
上面说的是自定义的配置,现在这里说自定义的配置文件,我们知道 Spring Boot 默认提供 application.properties 这个配置文件。那现在我们想自己写一个配置文件,并且能在应用中读取这个配置文件的信息,该如何做呢?这里就涉及到 @PropertySource 这个注解了。
自定义的配置文件:
custom.yml:
# 自定义的配置文件
version: 2.0
description: 求关注!
读取该配置文件的配置类:
@Data
@Configuration
@PropertySource("classpath:custom.yml")
public class DemoPropertiesSourceConfig {
@Value("${version}")
private String version;
@Value("${description}")
private String description;
}
这样,就能读取到自己编写的配置文件的配置信息了。
如果有多个自定义的配置文件,那么可以使用 @PropertySources 注解,可以看到最后面多加了一个 s ,说明这个单词是复数,通俗易懂。
@Configuration
@PropertySources({
@PropertySource("classpath:custom1.yml"),
@PropertySource("classpath:custom2.properties")
})
public class MyConfig {
// ...
}
总结
配置文件的两种写法:properties 和 yml
项目中存在多个配置文件,可以使用
spring.profiles.active属性来切换使用哪个配置文件。自定义的一些配置属性(配置项),如何读取呢?可以在程序中通过
@Value或者@ConfigurationProperties来读取。自定义的配置文件,可以通过
@PropertySource来指定获取该自定义配置文件的信息。
最后的最后
希望各位屏幕前的靓仔靓女们给个三连!你轻轻地点了个赞,那将在我的心里世界增添一颗明亮而耀眼的星!
咱们下期再见!
Spring Boot 配置文件总结的更多相关文章
- Spring Boot 配置文件详解
Spring Boot配置文件详解 Spring Boot提供了两种常用的配置文件,分别是properties文件和yml文件.他们的作用都是修改Spring Boot自动配置的默认值.相对于prop ...
- Springboot 系列(二)Spring Boot 配置文件
注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 不管是通过官方提供的方式获取 Spring ...
- 史上最全的Spring Boot配置文件详解
Spring Boot在工作中是用到的越来越广泛了,简单方便,有了它,效率提高不知道多少倍.Spring Boot配置文件对Spring Boot来说就是入门和基础,经常会用到,所以写下做个总结以便日 ...
- Spring Boot学习——Spring Boot配置文件application
Spring Boot配置文件有两种格式: application.properties 和 application.yml.两种配置文件只需要使用一个. 这两种配置文件的语法有些区别,如下 1. a ...
- Spring Boot配置文件大全
Spring Boot配置文件大全 ############################################################# # mvc ############## ...
- Spring Boot 配置文件和命令行配置
Spring Boot 属于约定大于配置,就是说 Spring Boot 推荐不做配置,很多都是默认配置,但如果想要配置系统,使得软件符合业务定义,Spring Boot 可以通过多种方式进行配置. ...
- Spring Boot 配置文件密码加密两种方案
Spring Boot 配置文件密码加密两种方案 jasypt 加解密 jasypt 是一个简单易用的加解密Java库,可以快速集成到 Spring 项目中.可以快速集成到 Spring Boot 项 ...
- 黑马_13 Spring Boot:04.spring boot 配置文件
13 Spring Boot: 01.spring boot 介绍&&02.spring boot 入门 04.spring boot 配置文件 05.spring boot 整合其他 ...
- spring boot 配置文件properties和YAML详解
spring boot 配置文件properties和YAML详解 properties中配置信息并获取值. 1:在application.properties配置文件中添加: 根据提示创建直接创建. ...
- Spring boot配置文件 application.properties
http://www.tuicool.com/articles/veUjQba 本文记录Spring Boot application.propertis配置文件的相关通用属性 # ========= ...
随机推荐
- java8利用流和lambda表达式对list遍历处理
java8的lambda表达式提供了一些方便list操作的方法,主要涵盖分组.过滤.求和.最值.排序.去重. 优点: (1) 简洁,跟之前的传统写法对比,能少写不少代码; (2) 易并行计算.尤其适用 ...
- RealWorldCTF渗透赛第二期复现-ctfshow
比赛概述 开始时间:2023年3月10日15时 环境保留时间:72小时 环境重置时间:20分钟 官方wp链接:Docs (feishu.cn) [本次复现跟着官方WP进行,只做记录学习之用] 0x1 ...
- AD域安全攻防实践(附攻防矩阵图)
以域控为基础架构,通过域控实现对用户和计算机资源的统一管理,带来便利的同时也成为了最受攻击者重点攻击的集权系统. 01.攻击篇 针对域控的攻击技术,在Windows通用攻击技术的基础上自成一套技术体系 ...
- 加密脚本分析—evil.py
加密脚本分析-evil.py 1.题目 源文件 一共两个文件 enc_flag.txt evil.py(原文件无注释) 1 # coding: utf-8 2 3 import base64 4 im ...
- AI 影评家:用 Hugging Face 模型打造一个电影评分机器人
本文为社区成员 Jun Chen 为 百姓 AI 和 Hugging Face 联合举办的黑客松所撰写的教程文档,欢迎你阅读今天的第二条推送了解和参加本次黑客松活动.文内含有较多链接,我们不再一一贴出 ...
- Maven安装详解
Maven Maven是apache软件基金会旗下的一个开源项目,是一款用于管理和构建Java项目的工具. Maven的作用? 先来简单介绍一下Maven的作用 (1)依赖管理 方便快捷的管理项目依赖 ...
- [思维提升|干货All in]6种算法解决LeetCode困难题:滑动窗口最大值
为了更好的阅读体验,欢迎阅读原文: [思维提升|干货All in]6种算法解决LeetCode困难题:滑动窗口最大值 (eriktse.com) 最近在leetcode遇到一道非常经典的题目:239. ...
- 【LeetCode动态规划#04】不同的二叉搜索树(找规律,有点像智力题)
不同的二叉搜索树 力扣题目链接(opens new window) 给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 示例: 思路 题意分析 先找一下关系 当n = 1时,如果 ...
- Mac 音频转换器推荐 DRmare Audio Converter、Audi Free Auditor
给大家推荐两款 Mac 上的音频转换器,这两款转换器都可以转换苹果音乐,iTunes歌曲或者一些常规的音轨到MP3, FLAC, WAV, M4A, AAC格式等等,转换后我们就可以在所有的设备和播放 ...
- 电商平台趋势妙手采集类API接口
电商平台趋势,平台化.大家可以看到大的电商都开始有自己的平台,其实这个道理很清楚,就是因为这是充分利用自己的流量.自己的商品和服务大效益化的一个过程,因为有平台,可以利用全社会的资源弥补自己商品的丰富 ...