【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.mzph.cn/news/24588.shtml

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

相关文章

两数相加 LeetCode热题100

题目 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会…

el-table某一列嵌套使用el-popover,使用click触发,导致页面下拉框组件无法触发弹框关闭(解决办法)

在弹框触发的方法里加上document.body.click() 即可 尝试了很多其他的方法都没用&#xff0c;只有这个解决了 完整代码&#xff1a; <el-select change"sourceChange" clearable ><el-optionv-for"option in list1":key"option.code":…

【 SpringSecurity】第三方认证方法级别安全

文章目录 SpringSecurity 第三方认证实现方法级别的安全 SpringSecurity 第三方认证 在登录网页时&#xff0c;时常有用其他账号登录的方式&#xff0c;它们能够让用户避免在Web站点特定的登录页上自己输入凭证信息。这样的Web站点提供了一种通过其他网站&#xff08;如Facebo…

matlab使用教程(9)—matlab基本语句

1.条件控制 - if、else、switch 条件语句可用于在运行时选择要执行的代码块。最简单的条件语句为 if 语句。例如&#xff1a; % Generate a random number a randi(100, 1); % If it is even, divide by 2 if rem(a, 2) 0 disp(a is even) b a/2; end 通过使用可选关键字 …

fishing之第四篇使用案例一模拟登陆口

文章目录 一、访问钓鱼平台二、Sending Profiles(发件人邮箱配置)三、User&Groups(接收人邮件列表)四、Landing Pags(钓鱼页面配置)五、Email Templates(邮件内容配置)六、Campaigns七、攻击结果查看免责声明一、访问钓鱼平台 详细查看第二篇的gophish的搭建 二…

WebRTC 之音视频同步

在网络视频会议中&#xff0c; 我们常会遇到音视频不同步的问题&#xff0c; 我们有一个专有名词 lip-sync 唇同步来描述这类问题&#xff0c;当我们看到人的嘴唇动作与听到的声音对不上的时候&#xff0c;不同步的问题就出现了 而在线会议中&#xff0c; 听见清晰的声音是优先…

Java窗体应用程序人事管理系统web人资招聘员工劳资jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 Java窗体应用程序人事管理系统 注意&#xff1a;此项…

Python 开发工具 Pycharm —— 使用技巧Lv.1

Basic code completion Ctrl空格 is available in the search field when you search for text in the current file CtrlF, so there is no need to type the entire string 基本代码完成Ctrl 空格可在搜索领域当你搜索文本在当前文件Ctrl F,所以没有必要整个字符串类型 To m…

迅为全国产龙芯3A5000电脑运行统信UOS、银河麒麟、loongnix系统

iTOP-3A5000开发板采用全国产龙芯3A5000处理器&#xff0c;基于龙芯自主指令系统 (LoongArch) 的LA464微结构&#xff0c;并进一步提升频率&#xff0c;降低功耗&#xff0c;优化性能。在与龙芯3A4000处理器保持引脚兼容的基础上&#xff0c;频率提升至2.5GHZ&#xff0c;功耗降…

自然语言处理学习笔记(三)————HanLP安装与使用

目录 1.HanLP安装 2.HanLP使用 &#xff08;1&#xff09;预下载 &#xff08;2&#xff09;测试 &#xff08;3&#xff09;命令行 &#xff08;4&#xff09;测试样例 3.pyhanlp可视化 4. HanLP词性表 1.HanLP安装 HanLP的 Python接口由 pyhanlp包提供&#xff0c;其安装…

STL容器适配器 -- priority_queue(使用+实现)(C++)

priority_queue priority_queue 简单介绍priority_queue 使用内置类型测试自定义类型测试 priority_queue 模拟实现仿函数&#xff08;less、greater&#xff09; priority_queue 简单介绍 优先级队列是一种容器适配器。类似于堆&#xff0c;可以随时插入元素&#xff0c;只能…

Docker环境下MySQL备份恢复工具XtraBackup使用详解 | Spring Cloud 62

一、XtraBackup 简介 Percona XtraBackup是一个开源的MySQL和MariaDB数据库备份工具&#xff0c;它能够创建高性能、一致性的备份&#xff0c;并且对生产环境的影响很小。Percona XtraBackup通过在不停止MySQL服务器的情况下&#xff0c;复制InnoDB存储引擎的数据文件和事务日…

应用Numpy实现对数据的处理

创建简单的数组 主要使用np.array()函数&#xff0c;语法如下 import numpy as np np.array(object,dtypeNone,copyTrue,orderK,subokFalse,ndmin0) 主要参数&#xff1a; Object&#xff1a;任何具有数组接口方法的对象 dtype&#xff1a;数据类型 ndmin:指定生成数组的最…

Apache Thrift C++库的TThreadPoolServer模式的完整示例

1. 本程序功能 1) 要有完整的request 和 response; 2) 支持多进程并行处理任务&#xff1b; 3)子进程任务结束后无僵尸进程 2.Apache Thrift C库的编译和安装 见 步步详解&#xff1a;Apache Thrift C库从编译到工作模式DEMO_北雨南萍的博客-CSDN博客 3.框架生成 数据字…

简述静态网页和动态网页的区别。简述 Webl.0 和 Web2.0 的区别。安装tomcat8,配置服务启动脚本,部署jpress应用

静态网页和动态网页区别 静态网页和动态网页是两种常见的网页类型&#xff0c;它们在内容生成和交互方式上存在不同。 静态网页是在服务器上提前生成好的网页&#xff0c;它的内容在访问时不会发生变化。静态网页通常由HTML、CSS和JavaScript等静态文件组成&#xff0c;这些文…

【css问题】flex布局中,子标签宽度超出父标签宽度,导致布局出现问题

场景&#xff1a;文章标题过长时&#xff0c;只显示一行&#xff0c;且多余的部分用省略号显示。 最终效果图&#xff1a; 实现时&#xff0c;flex布局&#xff0c;出现问题&#xff1a; 发现text-overflow: ellipsis不生效&#xff0c;省略符根本没有出现。 而且因为设置了 …

《MySQL高级篇》十五、其他数据库日志

文章目录 1. MySQL支持的日志1.1 日志类型1.2 日志的弊端 2. 慢查询日志(slow query log)3. 通用查询日志3.1 问题场景3.2 查看当前状态3.3 启动日志3.4 查看日志3.5 停止日志3.6 删除\刷新日志 4. 错误日志(error log)4.1 启动日志4.2 查看日志4.3 删除\刷新日志4.4 MySQL8.0新…

ThreadLocal有内存泄漏问题吗

对于ThreadLocal的原理不了解或者连Java中的引用类型都不了解的可以看一下我的之前的一篇文章Java中的引用和ThreadLocal_鱼跃鹰飞的博客-CSDN博客 我这里也简单总结一下: 1. 每个Thread里都存储着一个成员变量&#xff0c;ThreadLocalMap 2. ThreadLocal本身不存储数据&…

flutter开发实战-实现首页分类目录入口切换功能

。 在开发中经常遇到首页的分类入口&#xff0c;如美团的美食团购、打车等入口&#xff0c;左右切换还可以分页更多展示。 一、使用flutter_swiper_null_safety 在pubspec.yaml引入 # 轮播图flutter_swiper_null_safety: ^1.0.2二、实现swiper分页代码 由于我这里按照一页8…

装饰器模式(C++)

定义 动态(组合)地给一个对象增加一些额外的职责。就增加功能而言&#xff0c;Decorator模式比生成子类(继承)更为灵活(消除重复代码&减少子类个数)。 一《设计模式》 GoF 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xf…