【Spring Boot】(二)Spring Boot 配置文件的探索之旅

文章目录

  • 前言
  • 一、配置文件的作用
  • 二、配置文件的格式
    • 2.1 Spring Boot 配置文件格式
    • 2.2 properties 和 yml 的区别
  • 三、properties 配置文件
    • 3.1 properties 基本语法
    • 3.2 配置文件的读取
    • 3.3 properties 优缺点分析
  • 四、yml 配置文件说明
    • 4.1 yml 基本语法
    • 4.2 yml 使用案例
    • 4.3 yml 优缺点分析
  • 五、设置不同环境中的配置文件


前言

配置文件在软件开发中扮演着重要的角色,它允许我们在不改变源代码的情况下对应用程序的行为进行调整和配置对于 Spring Boot 这样的现代框架而言,配置文件更是其灵活性和易用性的关键所在。通过合理配置,我们可以将应用程序从开发环境无缝迁移到测试和生成环境,同时为不同的部署环境提供特定的配置

本文将深入探讨 Spring Boot 配置文件的各个方面,从基本语法到不同环境下的设置,帮助读者全面理解和灵活应用配置文件的相关知识。接下来,我将逐步介绍配置文件的不同方面,让我们一起踏上这趟关于 Spring Boot 配置的探索之旅。

一、配置文件的作用

配置文件是一种外部化配置的方式,用于存储应用程序的参数、选项和设置等信息。配置文件的主要作用如下

  1. 灵活性和可配置性:通过将配置信息从代码中分离出来,应用程序变得更加灵活和可配置。这意味着我们可以在不修改代码的情况下,通过简单地修改配置文件来调整应用程序的行为,从而满足不同的业务需求和环境要求。

  2. 降低耦合度:将配置信息外部化后,应用程序的不同组件之间的依赖性减少。这样,当需要更改某个配置时,只需修改配置文件而不会影响到其他部分的代码,降低了代码之间的耦合度,使代码更易于维护和扩展。

  3. 方便部署和管理:通过配置文件,我们可以将应用程序的设置与代码分离,这样在部署时,只需替换或更新配置文件而无需重新编译整个代码。同时,不同环境中的配置可以通过不同的配置文件来管理,从而简化了应用程序在不同环境中的部署和管理。

  4. 安全性:敏感信息(如数据库密码、API密钥等)通常不应该硬编码在代码中,而是存储在配置文件中。这样可以避免将敏感信息暴露在代码仓库或发布的应用程序中,提高了应用程序的安全性。

  5. 国际化和本地化:配置文件可以用于存储不同语言版本的文字和本地化信息。这样,应用程序可以根据用户的语言环境读取相应的配置文件,从而实现国际化和本地化的需求。

二、配置文件的格式

2.1 Spring Boot 配置文件格式

Spring Boot 支持多种配置文件格式,常见的有 properties 和 yml(YAML)两种格式。不同的格式适用于不同的场景,开发人员可以根据实际需求选择适合自己的配置文件格式。

1. properties 格式

properties 是一种键值对的文本格式,每一行包含一个属性和对应的值。它的格式类似于:key=value。在 Spring Boot 中,可以使用 properties 格式配置各种属性。例如:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=myusername
spring.datasource.password=mypassword
server.port=8080

2. yml(YAML)格式

YAML 是一种简洁、易读的数据序列化格式,它的全称 Yet Another Markup Language,翻译成中文就是 “另⼀种标记语言”。它是缩进的形式来表示层级关系,同时支持列表和映射等数据结构在 Spring Boot 中,yml 格式的配置文件通常以 .yml 或者 .yaml为后缀。与 properties 格式相比,yml 格式更加灵活和易于书写。例如:

spring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: myusernamepassword: mypassword
server:port: 8080

在 Spring Boot 项目中,理论上可以同时使用 properties 和 yml 格式的配置文件,它们可以共存于同一个项目中。当 properties 和 yml 配置文件同时存在且有相同的配置项时,properties 文件中的配置将具有优先级,即会覆盖 yml 文件中的同名配置

  • 这种配置优先级的机制使得开发人员可以更灵活地选择使用 properties 或 yml 格式来配置不同的参数,而且可以在不同的配置文件中组织和管理不同类型的配置信息。
  • 例如,可以将常规的、较为简单的配置项放在 properties 文件中,而将复杂的、结构化的配置项放在 yml 文件中,以提高可读性和维护性。

然而,尽管理论上允许使用两种格式的配置文件,但在实际项目中,通常会选择一种统一的配置文件格式。这样做有以下好处:

  1. 统一维护:使用统一的配置文件格式可以降低维护成本,减少混乱和错误。所有的配置信息都集中在同一种格式中,更便于开发团队统一维护和管理。

  2. 降低故障率:统一的配置文件格式避免了不同格式之间的转换和适配问题,减少了潜在的错误和故障。

  3. 易读性:使用统一的配置文件格式可以提高团队成员之间的沟通和理解,减少因格式差异带来的困扰。

  4. 规范化:统一的配置文件格式有助于形成规范和最佳实践,提高项目的可维护性和稳定性。

2.2 properties 和 yml 的区别

在选择配置文件格式时,可以根据以下几个方面来进行考虑:

  1. 语法结构:properties 格式使用简单的键值对结构,适合简单的配置场景。而 yml 格式使用缩进表示层级关系,可以更清晰地展现复杂的配置结构,适合处理较为复杂的配置。

  2. 易读性:yml 格式由于其缩进结构,更易读和维护。相比之下,properties 格式可能在配置较多或嵌套较深时,显得冗长和不够直观

  3. 扩展性:yml 格式支持更丰富的数据结构,如列表和映射,这使得它在处理复杂配置时更加灵活。而 properties 格式只能表示简单的键值对

  4. 键名约束:properties 格式中的键名不能包含空格,且需要遵循一定的命名规范。而 yml 格式中的键名可以包含空格,更加灵活

总体而言,对于简单的配置,properties 格式可能更加直观和方便;而对于复杂的配置,yml 格式的可读性和灵活性使其成为更好的选择。在实际应用中,根据项目的需求和团队的偏好,选择合适的配置文件格式是很重要的决策。Spring Boot 提供了对两种格式的全面支持,可以根据项目的实际情况进行选择和使用。

三、properties 配置文件

3.1 properties 基本语法

properties 配置文件是一种简单的键值对文本格式,每一行都包含一个属性和对应的值,使用等号 “=” 来连接键名和键值。基本语法如下:

# 配置项目的端口号
server.port=8084
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=
utf8
spring.datasource.username=root
spring.datasource.password=root

PS: 在配置文件中使用 “#” 来添加注释信息。

3.2 配置文件的读取

@Value@ConfigurationProperties 是 Spring Boot 中用于读取配置值的两种常用方式,它们都可以用于将配置文件中的属性值绑定到 Java 对象中,方便在代码中使用。

1. @Value 注解:

@Value 是 Spring 框架中的一个注解,它可以直接用于将配置文件中的属性值注入到 Spring Bean 中的属性上。通过在属性上使用 @Value 注解,并指定属性的键名(如 ${key}),Spring Boot 将会自动从配置文件中读取对应的值,并赋值给属性。

假设我们有一个 application.properties 配置文件,内容如下:

app.name=My Application
app.version=1.0.0

然后我们可以在 Spring Bean 中使用 @Value 注解来读取这些配置项:

@Component
public class MyBean {@Value("${app.name}")private String appName;@Value("${app.version}")private String appVersion;@PostConstructpublic void doPostConstruct(){System.out.println("appName: " + appName);System.out.println("appVersion: " + appVersion);}
}

上述代码表示创建一个 MyBean,它使用@Value注解来读取配置文件中的属性值,并在 @PostConstruct 注解标注的方法中打印出读取到的属性值。运行启动类,就可以看到控制台打印出相关的配置信息:

2. @ConfigurationProperties 注解:

@ConfigurationProperties 是 Spring Boot 提供的专用于读取配置文件属性的注解。它可以将配置文件中的属性值绑定到 Java 对象中的对应属性上,并提供了更加灵活的配置项绑定功能。需要注意的是,使用 @ConfigurationProperties 注解时,需要提供一个 prefix 参数,用于指定配置文件中属性的前缀,以便进行属性的匹配。

假设我们有一个 application.properties 配置文件,内容如下:

app.name=My Application
app.version=1.0.0

然后我们可以创建一个 Java 类,并使用 @ConfigurationProperties 注解来读取这些配置项:

@Component
@Setter
@ConfigurationProperties("app")
public class AppConfig {private String name;private String version;@PostConstructpublic void init() {System.out.println("appName: " + name);System.out.println("appVersion: " + version);}
}

在上述示例中,@ConfigurationProperties(prefix = "app") 指定了配置文件中的属性前缀为 “app”,Spring Boot 将会自动读取以 “app” 为前缀的配置项,并将对应的值赋值给 AppConfig 类的相应属性。

注意,此时一定要提供 Setter 方法才行,此处我使用的是Lombok工具中的 @Setter 注解为我提供 Setter 方法。

运行启动类:

二者的区别:

  • @Value 注解用于直接将配置文件中的某个属性值注入到一个 Spring Bean 的属性上。适用于简单的配置项读取。
  • @ConfigurationProperties 注解用于将配置文件中的多个属性值绑定到一个 Java 对象中的多个属性上,提供了更灵活的配置项绑定功能,支持复杂数据结构的配置。适用于复杂的配置项读取。

综上所述,@Value@ConfigurationProperties 都是常用的读取配置值的方式,选择使用哪种方式取决于实际需求和配置项的复杂程度。

3.3 properties 优缺点分析

3.3 properties 优缺点分析:

优点:

  1. 简单直观:properties 配置文件采用简单的键值对格式,易于书写和阅读,对于简单的配置项非常直观和方便。

  2. 广泛支持:properties 格式是一种通用的配置文件格式,在绝大多数编程语言和框架中都得到支持,因此适用于各种应用场景。

  3. 配置清晰:由于 properties 配置文件以键值对的形式表示配置项和配置值的对应关系,使得配置清晰明了,易于维护和修改。

  4. 快速读取:properties 配置文件的格式简单,读取速度较快,对于快速获取配置信息较为高效。

缺点:

  1. 缺乏结构:properties 配置文件只支持简单的键值对结构,无法表示复杂的数据结构,如嵌套对象和列表等。当配置项较为复杂时,可能不够灵活。

  2. 键名限制:properties 配置文件中的键名不能包含空格等特殊字符,且需要遵循一定的命名规范,不够灵活。

  3. 不支持多行值:properties 配置文件中的值必须写在一行中,不支持跨行表示配置值,这在配置较长的文本时可能显得不够便捷。

综上所述,properties 配置文件是一种简单实用的配置格式,适用于简单的配置场景。然而,properties 格式有一些明显的缺点,如缺乏结构、键名限制、冗余等,这些缺点在配置项较为复杂时可能会限制其使用。在实际开发中,根据项目的配置复杂性和需求,可以选择更为灵活的配置文件格式,如 yml 格式,来满足更复杂的配置需求。

四、yml 配置文件说明

4.1 yml 基本语法

yml 格式使用缩进表示层级关系,支持列表和映射等数据结构,以及注释和多行文本等特性。基本语法如下:

  1. 键值对:
key1: value1
key2: value2
  1. 列表:
key3:- item1- item2
  1. 嵌套映射:
key4:subkey1: value1subkey2: value2
  1. 多行文本:
key5: |This is a multiline text.It can span multiple lines without escaping special characters.
  1. 注释:
# This is a comment.
key6: value6  # This is another comment.

yml 配置文件的读取和 properties 配置文件读取方法一致。

4.2 yml 使用案例

假设我们有一个 application.yml 配置文件,内容如下:

app:name: My Applicationversion: 1.0.0author: 张三server:port: 8080database:url: jdbc:mysql://localhost:3306/mydbusername: myusernamepassword: mypassword

在上述案例中,yml 格式的配置文件展示了多种常用的配置方式。app 部分是一个映射,包含了应用程序的名称、版本和作者等属性。server 部分是一个简单的键值对,指定了项目的启动端口。database 部分是一个嵌套映射,包含了数据库连接的相关属性。

4.3 yml 优缺点分析

优点:

  1. 灵活易读:yml 格式使用缩进表示层级关系,易于阅读和书写。支持列表、映射和多行文本等特性,能够更清晰地展现复杂的配置结构,提高了配置文件的可读性和可维护性。

  2. 支持复杂数据结构:yml 格式支持列表和嵌套映射,可以表示更为复杂的数据结构,适用于处理复杂的配置项。

  3. 支持注释:yml 格式允许添加注释,可以在配置文件中添加解释性的注释信息,便于理解和说明配置项的含义。

  4. 不受键名限制:yml 格式中的键名可以包含空格等特殊字符,不需要遵循特定的命名规范,更加灵活。

缺点:

  1. 学习成本:相对于 properties 格式,yml 格式的语法可能较为复杂,对于初学者需要花费一些时间来适应和学习。

  2. 易出错:由于 yml 格式依赖于缩进表示层级关系,如果缩进不正确,可能会导致配置解析错误,增加了出错的可能性。

综上所述,yml 配置文件是一种灵活、易读的配置格式,适用于复杂的配置场景。它的优点在于灵活易读、支持复杂数据结构、支持注释和不受键名限制,能够提高配置文件的可读性和维护性。然而,yml 格式也有一些缺点,如学习成本较高和易出错,需要开发

五、设置不同环境中的配置文件

在 Spring Boot 中,可以通过不同的配置文件来区分不同的环境,如开发环境、测试环境和生产环境。Spring Boot 默认会加载 application.yml(或 application.properties)作为主配置文件,但可以根据不同的环境加载不同的配置文件。通过命名规则,可以让 Spring Boot 自动识别并加载对应的环境配置文件。

在 Spring Boot 中,设置不同环境中的 yml 配置文件可以通过命名规则来实现。以下是针对开发环境、测试环境和生产环境的配置文件命名规则。
开发环境配置文件:application-{profile}.yml

  • 命名示例:application-dev.yml
  • {profile} 部分为环境名称,例如:dev,development,等等。

测试环境配置文件:application-{profile}.yml

  • 命名示例:application-test.yml
  • {profile} 部分为环境名称,例如:test,testing,等等。

生产环境配置文件:application-{profile}.yml

  • 命名示例:application-prod.yml
  • {profile} 部分为环境名称,例如:prod,production,等等。

根据上述命名规则,当启动 Spring Boot 应用程序时,可以通过设置 spring.profiles.active 属性来指定当前激活的环境配置。例如,设置 spring.profiles.active=dev 将加载 application-dev.yml 中的配置,而设置 spring.profiles.active=prod 将加载 application-prod.yml 中的配置。

假设我们有三个环境:开发环境、测试环境和生产环境。我们可以按照以下方式创建对应的配置文件

  1. application-dev.yml:开发环境配置文件
  2. application-test.yml:测试环境配置文件
  3. application-prod.yml:生产环境配置文件

在这些配置文件中,可以针对不同的环境设置相应的配置项。例如:

application-dev.yml

app:name: My Dev Applicationserver:port: 8080debug: true

application-test.yml

app:name: My Test Applicationserver:port: 8081debug: true

application-prod.yml

app:name: My Production Applicationserver:port: 8082debug: false

主配置文件 application.yml

app:name: My Applicationversion: 1.0.0spring:profiles:default: dev

这样,在不同的环境中启动 Spring Boot 应用程序时,Spring Boot 会自动根据 spring.profiles.active 的值加载对应的配置文件。例如,设置为 dev 时,会加载 application-dev.yml 中的配置;设置为 test 时,会加载 application-test.yml 中的配置;设置为 prod 时,会加载 application- prod.yml 中的配置。

在实际部署和运行应用程序时,只需要修改 spring.profiles.active 的值为对应的环境名称,就可以使用相应的配置。这种方式使得应用程序的配置在不同环境中更加灵活和方便切换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/79810.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Ble蓝牙App(三)特性和属性

Ble蓝牙App(三)特性使用 前言正文一、获取属性列表二、属性适配器三、获取特性名称四、特性适配器五、加载特性六、显示特性和属性七、源码 前言 在上一篇中我们完成了连接和发现服务两个动作,那么再发现服务之后要做什么呢?发现服…

在centos7上使用非编译方式安装ffmpeg

很多在centos7上安装ffmpeg的教程都需要使用编译方式的安装;编译时间较长而且需要配置; 后来搜索到可以通过加载rpm 源的方式实现快速便捷操作 第一种方式: 首先需要安装yum源: yum install epel-release yum install -y https://mirrors.…

GPU版PyTorch对应安装教程

一、正确安装符合自己电脑的对应GPU版本的PyTorch之前需要了解三个基本概念 算力、CUDA driver version、CUDA runtime version ①算力:需要先知道你的显卡,之后根据官网表格进行对应,得到算力 ②CUDA driver version:电脑上显卡…

python编写小程序有界面,python编写小程序的运行

大家好,小编为大家解答python编写小程序怎么看代码的的问题。很多人还不知道python编写小程序的运行,现在让我们一起来看看吧! Python第一个简单的小游戏 temp input("请猜一猜姐姐的幸运数字是: ") guess int(temp) …

99%的人做效果图都会忽略的问题!为什么你的效果图没有亚洲面孔?

不知道各位设计师有没有发现一个问题,我们做了不少效果图,也积攒了很多素材,但是出现在我们效果图的人物几乎都是外国人! 可能你会说是亚洲人的素材实在太少,但本质是对“人”不够重视,觉得随便“复制粘贴”…

数据结构 | 利用二叉堆实现优先级队列

目录 一、二叉堆的操作 二、二叉堆的实现 2.1 结构属性 2.2 堆的有序性 2.3 堆操作 队列有一个重要的变体,叫作优先级队列。和队列一样,优先级队列从头部移除元素,不过元素的逻辑顺序是由优先级决定的。优先级最高的元素在最前&#xff…

火爆全网,Python自动化测试Allure测试报告生成,最强总结...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Allure测试报告框…

JavaWeb(9)——前端综合案例3(悬停显示下拉列表)

一、实例需求 ⌛ 实现类似百度首页的“一个简单的鼠标悬停显示的下拉列表效果”。 二、代码实现 ☕ <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>.dropdown-cont…

外部链接跳转到vue项目传递参数实现单点登录

1、问题背景描述&#xff1a; 我有一个困扰了很久项目需求&#xff0c;前台门户用的MVC&#xff0c;前台登录之后需要能点击某个按钮就能进入后台vue开发的前端项目&#xff0c;不需要重新登录。这个需求中mvc项目相对于vue项目来说是外部链接&#xff0c;他要跳转到vue项目&a…

9、Kubernetes核心技术 - Volume

目录 一、概述 二、卷的类型 三、emptyDir 四、hostPath 五、NFS 5.1、master服务器上搭建nfs服务器 5.2、各个slave节点上安装nfs客户端 5.3、创建Pod 六、PV和PVC 6.1、PV 6.1.1、PV资源清单文件示例 6.1.2、PV属性说明 6.1.3、PV的状态 6.2、PVC 6.2.1、PVC资…

git开发过程中的使用

1、先创建本地分支&#xff0c;然后修改代码 2、本地提交 push 3、合并为主分支 回到master分支

Bigemap如何添加谷歌地图?

工具 Bigemap gis office地图软件 BIGEMAP GIS Office-全能版 Bigemap APP_卫星地图APP_高清卫星地图APP 打开软件&#xff0c;要提示需要授权和添加地图&#xff0c;然后去点击选择地图这个按钮&#xff0c;列表中有个添加按钮点进去选择添加地图的方式。 第一种方式&#x…

UML—用例图的那些事

目录 背景: 1.用例图的发展史 过程: 1.用例图中的元素和关系 2.应用中的例子 总结&#xff1a; 背景: 1.用例图的发展史 用例图是一种常用的软件工程工具&#xff0c;用于描述系统的功能需求和用户与系统的交互。它在软件开发过程中起到了重要的作用&#xff0c;并且经历了…

【开源项目--稻草】Day06

【开源项目--稻草】Day06 1. 学生提问与解答功能2. 显示create.html2.1 HomeController中代码2.2 复用网页的标签导航条 3. 创建问题发布界面3.1 富文本编辑器 4.多选下列框5.动态加载所有标签和老师6. 发布问题的业务处理 1. 学生提问与解答功能 学生提问: 提问时指定标签和回…

VBA遍历Wrod所有表格每个单元格,单元格未尾两个回车替换

一、遍历 word中遍历所有表格的每个单元格。因为在单元格时会常出错。浪费了不少时间。 Sub a()Dim doc As Document, tb As Table, ce As cellDim rng As Range, p As ParagraphSet doc ActiveDocumentFor Each tb In doc.TablesFor Each ce In tb.Range.Cells 关键处就是这里…

Java中的Unsafe类详解

Java中的Unsafe类详解 1. Unsafe 概念2. Unsafe 构造及获取3. 功能和应用3.1 内存管理3.1.1 普通读写3.1.2 volatile 读写3.1.3 有序读写3.1.4 直接操作内存 3.2 CAS3.3 偏移量3.4 线程调度3.5 类加载3.6 内存屏障3.7 其他操作 4. 潜在风险和挑战5. 最佳实践5.1 使用案例&#…

QtAV for ubuntu16.04

下载ubuntu https://releases.ubuntu.com/16.04/ubuntu-16.04.7-desktop-amd64.iso 下载ffmpeg https://ffmpeg.org/download.html 下载QtAV https://github.com/wang-bin/QtAV/releases 更新 sudo apt update 安装库 sudo apt-get install libglu1-mesa-dev freeglut3-dev…

【算法系列 | 7】深入解析查找算法之—布隆过滤器

序言 心若有阳光&#xff0c;你便会看见这个世界有那么多美好值得期待和向往。 决定开一个算法专栏&#xff0c;希望能帮助大家很好的了解算法。主要深入解析每个算法&#xff0c;从概念到示例。 我们一起努力&#xff0c;成为更好的自己&#xff01; 今天第3讲&#xff0c;讲一…

【数据结构】链表(一)

链表&#xff08;一&#xff09; 文章目录 链表&#xff08;一&#xff09;01 引入02 概念及结构03 单向不带头不循环链表实现3.1 创建节点类型3.2 简易创建一个链表3.3 遍历链表每个节点3.4 获取链表长度3.5 查找是否包含关键字key是否在单链表当中3.6 头插法3.7 尾插法3.8 任…

MySQL 重置root 密码

5.7 版本 首先要把服务mysql57 关闭 net stop MySQL57 在安装的mysql57的程序的bin中 运行cmd&#xff08;管理员运行&#xff09; mysqld --defaults-file‘mysql存放数据的位置\my.ini’ --skip-grant-tables 上图 错误 注意&#xff1a;如果遇到mysqld: Can’t change dir…