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

news2024/11/24 21:06:22

文章目录

  • 前言
  • 一、配置文件的作用
  • 二、配置文件的格式
    • 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/mydb
    username: myusername
    password: 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;

    @PostConstruct
    public 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;

    @PostConstruct
    public 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: value1
  subkey2: 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 Application
  version: 1.0.0
  author: 张三

server:
  port: 8080

database:
  url: jdbc:mysql://localhost:3306/mydb
  username: myusername
  password: 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 Application

server:
  port: 8080

debug: true

application-test.yml

app:
  name: My Test Application

server:
  port: 8081

debug: true

application-prod.yml

app:
  name: My Production Application

server:
  port: 8082

debug: false

主配置文件 application.yml

app:
  name: My Application
  version: 1.0.0

spring:
  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.coloradmin.cn/o/841488.html

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

相关文章

《硅基物语.我是灵魂画手》一本书讲透AI绘画,AIC松鼠活动第六期

《硅基物语我是灵魂画手》 当AI遇上绘画,会打开怎样的奇妙世界? 用ChatGPTMidjourney西出人类的灵魂与梦想 用StableDiffusionD-ID画出青春绚丽的渴望 激活每个人隐藏的绘画天赋 人人都能成为顶尖绘画大师 如果你问我对于 AI绘画的态度,我会告诉你…

中信银行与华为联合编制:《2023金融数据可信流通技术白皮书》

导读 中信银行与华为技术有限公司联合编制的《金融数据可信流通技术白皮书》,从技术、业务、管理、法律等维度探讨了金融业数据流通的现状、问题、机遇和挑战,并提出了一套金融业数据流通的技术解决方案。该方案基于华为OceanStor存储,结合…

枫叶时代:打造中国特色的传统文化IP

近年来,取材于传统文化的影视作品在文化产业市场受到前所未有的关注。作为一种兼具辨识度、影响力和流量变现能力的文化符号,影视IP既是文化产业的一个重要环节,也是国家文化软实力的直接体现。优秀的影视IP可以超越文字、语言、民族的障碍&a…

-bash: ./startup.sh: Permission denied解决

今天在Linux上启动Tomcat,结果弹出:-bash: ./startup.sh: Permission denied 的提示。 这是因为用户没有权限,而导致无法执行。用命令chmod 修改一下bin目录下的.sh权限就可以了。 在Tomcat的bin目录下 ,输入命令行 :c…

使用Python + Flask搭建web服务

示例脚本 from flask import Flask# 获取一个实例对象 app Flask(__name__)# 1、注册 app.route(/reg, methods[get]) def reg():return {code: 200,msg: reg ok!}# 2、登录 app.route(/login, methods[get]) def login():return login ok!if __name__ __main__:…

Springboot+Easyexcel将数据写入模板文件并导出Excel

SpringbootEasyexcel将数据写入模板文件并导出Excel 一、导入依赖二、根据excel表头创建对应的实体类Pojo三、Controller类接收请求四、Service层获取待写入数据五、效果展示六、总结 一、导入依赖 <!--操作excel工具包--> <dependency><groupId>com.alibab…

DevOps在项目管理中的魔法:简化与深化

什么是DevOps&#xff1f; 定义与核心思想 DevOps, 这个名词&#xff0c;在技术领域中饱受瞩目。但它到底是什么&#xff1f;首先&#xff0c;DevOps并不仅仅是一个技术或者工具&#xff0c;它首先是一种文化&#xff0c;一种思想。DevOps是Development&#xff08;开发&#…

SQL 数据科学:了解和利用联接

推荐&#xff1a;使用 NSDT场景编辑器助你快速搭建可编辑的3D应用场景 什么是 SQL 中的连接&#xff1f; SQL 联接允许您基于公共列合并来自多个数据库表的数据。这样&#xff0c;您就可以将信息合并在一起&#xff0c;并在相关数据集之间创建有意义的连接。 SQL 中的连接类型…

macOS下Django环境搭建-docker运行Django

1. macOS升级pip /Library/Developer/CommandLineTools/usr/bin/python3 -m pip install --upgrade pip 2. 卸载Python3.9.5版本 $ sudo rm -rf /usr/local/bin/python3 $ sudo rm -rf /usr/local/bin/pip3 $ sudo rm -rf /Library/Frameworks/Python.framework 3. 安装P…

【Linux操作系统】Vim:提升你的编辑效率

Vim是一款功能强大的文本编辑器&#xff0c;它具有高度可定制性和灵活性&#xff0c;可以帮助程序员和文本编辑者提高编辑效率。本文将介绍Vim的基本使用方法、常用功能和一些实用技巧。 文章目录 1. Vim的基本使用方法&#xff1a;2. 常用功能&#xff1a;2.1 文件操作&#…

Linux发行版分类与安装选择分析

1、引言 我们经常接触Linux&#xff0c;但是很多初学者往往面对众多的发行版不知所措。Ubuntu、CnetOS、Fedora等等。Linux众多的发行版让人眼花缭乱&#xff0c;本篇就来梳理一下目前Linux发行版的状况&#xff0c;让大家了解一个整体情况&#xff0c;理清不同版本的关系。 …

安全杂记 - 复现nodejs沙箱绕过

目录 一. 配置环境1.下载nodejs2.nodejs配置3.报错解决方法 二. nodej沙箱绕过1. vm模块2.使用this或引用类型来进行沙箱绕过 一. 配置环境 1.下载nodejs 官网&#xff1a;https://nodejs.org/en2.nodejs配置 安装nodejs的msi文件&#xff0c;默认配置一直下一步即可&#x…

【linux源码学习】【实验篇】使用bochs运行linux0.11系统(搭建一个自己的工作站)

目录 背景资源获取bochs环境搭建windowsbochs环境搭建linux声明 背景 最近看赵炯老师的《linux内核完全注释》&#xff0c;然后在最后一个习题里面看到使用bochs跑一下0.11的内核代码&#xff0c;本来觉得很难&#xff0c;但是如果做过一遍就会发现其实很简单&#xff0c;这个…

ld加上-static -lc参数报错`ld: cannot find -lc`处理方法

cat /etc/redhat-release看到操作系统是CentOS Linux release 7.6.1810&#xff0c;uname -r看到内核版本是3.10.0-957.el7.x86_64&#xff0c;as --version看到as的版本是2.27-34.base.el7&#xff0c;ld --version看到ld的版本是2.27-34.base.el7。 absCallWithStart.s里边…

Crescent QuickPak Crack

Crescent QuickPak Crack Crescent QuickPak是一个32位ActiveX组件的综合集合&#xff0c;用于使用Visual Basic开发应用程序&#xff0c;这将减少开发时间并提高生产力。Crescent QuickPak包含Internet功能&#xff0c;用于打开、读取和解析IIS日志文件&#xff0c;将日志文件…

Spring Boot如何整合mybatis

文章目录 1. 相关配置和代码2. 整合原理2.1 springboot自动配置2.2 MybatisAutoConfiguration2.3 debug过程2.3.1 AutoConfiguredMapperScannerRegistrar2.3.2 MapperScannerConfigurer2.3.4 创建MapperFactoryBean2.3.5 创建MybatisAutoConfiguration2.3.6 创建sqlSessionFact…

无涯教程-Perl - if...elsif...else语句函数

if 语句后可以跟可选的 elsif ... else 语句&#xff0c;这对于使用单个if ... elsif语句测试各种条件非常有用。 if...elsif...else - 语法 Perl编程语言中的 if ... elsif...else语句的语法是- if(boolean_expression 1) {# Executes when the boolean expression 1 is tr…

自然语言处理文本分割[Text segmentation]:PoNet算法使用多粒度Pooling结构替代attention的网络

NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等 专栏详细介绍:NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型…

基于react-native的简单消息确认框showModel

基于react-native的简单消息确认框showModel 效果示例图组件代码ShowModel/index.jsx使用案例device.js安装线性渐变色 效果示例图 组件代码ShowModel/index.jsx import React, {forwardRef, useImperativeHandle, useState} from react; import {View,Text,Modal,TouchableOp…

恒盛策略:15亿成立地产公司?华为紧急回应!10倍大牛股闪崩

今天上午A股商场和港股整体低位震动&#xff0c;但走势整体平稳&#xff0c;动摇不大。 A股商场方面&#xff0c;TMT赛道股走强&#xff0c;近期火热的券商板块则现分解&#xff0c;昨夜发布半年报的公司今天上午股价也分解明显。 港股商场&#xff0c;大都股票动摇不大&#…