Spring Boot配置文件(YAML Properties)总结

文章目录

    • 配置文件的作用
    • YAML配置文件
    • Properties配置文件
    • 配置文件的加载顺序
    • 激活不同的配置文件
    • 配置文件的占位符
    • 自定义配置属性
    • 加密敏感信息
    • 配置文件的最佳实践
    • 结论

在这里插入图片描述

🎉欢迎来到架构设计专栏~Spring Boot配置文件(YAML & Properties)总结


  • ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
  • ✨博客主页:IT·陈寒的博客
  • 🎈该系列文章专栏:架构设计
  • 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
  • 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • 📜 欢迎大家关注! ❤️

Spring Boot是一种用于简化Spring应用程序开发的框架,它提供了强大的配置管理功能。Spring Boot支持多种配置文件格式,包括YAML和Properties。在本文中,我们将总结Spring Boot配置文件的用法、语法规则以及最佳实践。

配置文件的作用

Spring Boot的配置文件用于配置应用程序的各种属性,包括数据库连接、端口号、日志级别、第三方服务的密钥等。通过配置文件,我们可以灵活地管理应用程序的配置,而不需要修改源代码。
在这里插入图片描述

YAML配置文件

YAML(YAML Ain’t Markup Language)是一种人类可读的数据序列化格式,它以缩进方式表示数据层次结构。在Spring Boot中,YAML文件通常用于配置复杂的属性。
在这里插入图片描述

以下是一个简单的YAML配置文件示例:

server:port: 8080servlet:context-path: /myappspring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: password

在这个示例中,我们定义了服务器端口、Servlet上下文路径以及数据库连接属性。注意YAML文件的缩进表示层次结构,因此子属性(如portcontext-path)必须缩进两个空格以表示它们是父属性的子属性。

Properties配置文件

Properties文件是键值对的形式,它在Spring Boot中也被广泛使用。以下是上述YAML配置文件的等效Properties版本:

server.port=8080
server.servlet.context-path=/myappspring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=password

在Properties文件中,每一行都包含一个属性的键值对。键和值之间使用等号(=)分隔。
在这里插入图片描述

配置文件的加载顺序

Spring Boot配置文件可以存在于多个位置,它们会按照特定的顺序加载。以下是加载顺序:

  1. 当前目录下的/config文件夹。
  2. 当前目录。
  3. 类路径下的/config包。
  4. 类路径根目录。

这意味着如果存在多个配置文件,后加载的配置文件会覆盖前加载的配置,从而允许我们在不同环境中使用不同的配置文件。

激活不同的配置文件

Spring Boot使用spring.profiles.active属性来激活不同的配置文件。可以在application.propertiesapplication.yaml中设置该属性,也可以在命令行或环境变量中指定。

例如,在application.properties中设置激活的配置文件为dev

spring.profiles.active=dev

然后,创建一个名为application-dev.propertiesapplication-dev.yaml的配置文件,其中包含与dev环境相关的配置。

配置文件的占位符

Spring Boot允许在配置文件中使用占位符${...}来引用其他属性的值。这对于在不同配置文件之间共享属性值非常有用。

以下是一个使用占位符的示例:

server.port=8080
app.name=myapp-${server.port}

在这个示例中,app.name属性的值将被解析为myapp-8080

自定义配置属性

除了使用Spring Boot默认的配置属性外,我们还可以定义自己的配置属性。要定义自定义配置属性,可以创建一个Java类,并使用@ConfigurationProperties注解来指定属性的前缀。然后,将该类作为一个Bean注册到Spring容器中。

以下是一个自定义配置属性的示例:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "myapp")
public class MyAppProperties {private String greeting;public String getGreeting() {return greeting;}public void setGreeting(String greeting) {this.greeting = greeting;}
}

在上述示例中,我们定义了一个名为myapp.greeting的属性,并在MyAppProperties类中声明了一个相应的字段。现在,我们可以在配置文件中设置这个属性的值:

myapp:greeting: Hello, World!

然后,可以在应用程序中注入MyAppProperties类来获取该属性的值。

加密敏感信息

在实际项目中,配置文件可能包含一些敏感信息,如数据库密码、API密钥等。为了保护这些敏感信息,Spring Boot提供了加密和解密属性值的功能。
在这里插入图片描述

可以使用jasypt-spring-boot-starter等第三方库来实现属性加密。以下是一个示例:

首先,添加依赖:

<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.3</version>
</dependency>

然后,在配置文件中使用加密的敏感属性:

myapp:password: ENC(密文)

在上述示例中,ENC(...)表示属性值已被加密。Spring Boot会自动解密属性值并注入到应用程序中。

配置文件的最佳实践

以下是一些Spring Boot配置文件的最佳实践:

  1. 使用YAML格式配置文件来管理复杂的属性,使用Properties格式配置文件来管理简单的属性。
  2. 使用多个配置文件来支持不同的环境(如application-dev.yamlapplication-prod.yaml等)。
  3. 使用占位符来引用其他属性的值,以避免硬编码。
  4. 将敏感信息加密存储,并使用第三方库来实现属性加密。
  5. 使用自定义配置属性类来封装和管理相关属性。
    在这里插入图片描述

结论

Spring Boot配置文件是管理应用程序配置的关键。通过合理地使用YAML和Properties格式的配置文件,我们可以轻松管理应用程序的各种属性,从而提高了应用程序的灵活性和可维护性。同时,Spring Boot还提供了丰富的功能来支持自定义配置属性和属性加密,以满足不同项目的需求。希望本文对您理解和使用Spring Boot配置文件有所帮助!


🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏
📜您可能感兴趣的内容:

  • 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
  • 【Java学习路线】2023年完整版Java学习路线图
  • 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
  • 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
  • 【数据结构学习】从零起步:学习数据结构的完整路径

在这里插入图片描述

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

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

相关文章

C#控制台程序中使用log4.net来输出日志

Apache log4net 库是一个帮助程序员将日志语句输出到各种输出目标的工具。log4net 是优秀的 Apache log4j™ 框架到 Microsoft .NE​​T 运行时的端口。 我喜欢他可以自定义输出&#xff0c;区分等级等特点。 导入库 我们在工程里添加NuGet的包。输入名称log4net &#xff0…

【每日一题】852. 山脉数组的峰顶索引

852. 山脉数组的峰顶索引 - 力扣&#xff08;LeetCode&#xff09; 符合下列属性的数组 arr 称为 山脉数组 &#xff1a; arr.length > 3存在 i&#xff08;0 < i < arr.length - 1&#xff09;使得&#xff1a; arr[0] < arr[1] < ... arr[i-1] < arr[i] ar…

SpringMVC 的三种异常处理方式详解

目录 1. 什么是异常 2. 为什么要全局异常处理 3. SpringMVC异常分类 4. 异常处理思路 5. 三种异常处理方式示例 ① 配置 SimpleMappingExceptionResolver 处理器 ② 实现 HandlerExceptionResolver 接口 ③ 使用ControllerAdviceExceptionHandler实现全局异常 6. 响应…

如何在windows环境下编译T

一&#xff0c; 安装MYSYS2 1. 去https://www.msys2.org下载 msys2-x86_64-xxxxx.exe; 2. 按照msys2.org主页提示的步骤安装; 3.安装完默认起来的是 UCRT的&#xff0c; 可以根据环境的需要选择&#xff0c; 我选择的 MSYS2 MINGW64 4. 搭建编译环境&#xff0c; 安装对应的软…

18. 线性代数 - 线性变换

文章目录 线性空间线性变换线性变换的几何意义特征值与特征向量NumPy的矩阵操作Hi, 你好。我是茶桁。 经历了几节线性代数课程之后,终于咱们到了最后一节课了。本节课的内容说多不多,说少也不少。 我们先是要理解一下线性空间和线性变换,并且探讨一下线性变换的几何意义。…

目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)

目标分类 一、目标分类介绍1.1 二分类和多分类的区别1.2 单标签和多标签输出的区别 二、代码获取三、数据集准备四、环境搭建4.1 环境测试 五、模型训练六、模型测试6.1 多标签训练-单标签输出结果6.2 多标签训练-多标签输出结果 一、目标分类介绍 目标分类是一种监督学习任务…

如何利用AirDroid远程访问安卓设备屏幕?

屏幕镜像也叫屏幕截图或投屏&#xff0c;是AirDroid 个人版的一个免费功能&#xff0c;局域网或非局域网条件下都可以使用。 利用AirDroid的屏幕镜像功能&#xff0c;你可以将自己的安卓设备投屏到电脑进行直播或开会演示&#xff1b;也可以将安卓设备的屏幕共享到另一台手机或…

【Docker】Docker简介

Docker简介 &#x1f4cb;导航 1. Docker简介1.1 什么是Docker&#xff1f;1.2 什么是容器&#xff1f;1.3 容器的优势&#xff1f;1.4 Docker的优势&#xff1f;1.5 虚拟技术与容器技术Docker的区别&#xff1f;1.6 为什么学习Docker? 2. 安装Docker3. Docker架构4. Docker命…

碎片笔记 | 大模型攻防简报

前言&#xff1a;与传统的AI攻防&#xff08;后门攻击、对抗样本、投毒攻击等&#xff09;不同&#xff0c;如今的大模型攻防涉及以下多个方面的内容&#xff1a; 目录 一、大模型的可信问题1.1 虚假内容生成1.2 隐私泄露 二、大模型的模型安全问题&#xff08;传统AI攻防&…

Apache Doris 2.0 如何实现导入性能提升 2-8 倍

数据导入吞吐是 OLAP 系统性能的重要衡量标准之一&#xff0c;高效的数据导入能力能够加速数据实时处理和分析的效率。随着 Apache Doris 用户规模的不断扩大&#xff0c; 越来越多用户对数据导入提出更高的要求&#xff0c;这也为 Apache Doris 的数据导入能力带来了更大的挑战…

Unity ProBuilder(自己创建斜面、拐角)

目录 基础操作 下载 打开面板 新增对象 材质保存 1.斜面实例 2.拐角实例 3.切割实例 4.单独面赋值 基础操作 下载 打开面板 新增对象 选中想创建的块体后&#xff0c;在编辑器见面拉出块体 材质保存 打开材质编辑器后&#xff0c;将材质赋值&#xff0c;之后&am…

简单记录一下Splunk ES 升级

1: 背景: 现在有些app 产品对splunk ES (enterprise security) 的版本有要求,这个就要求splunk ES 随着Splunk enterprise 也一起升级,下面先列一下各个版本的兼容: Splunk products version compatibility matrix - Splunk Documentation 下面列出的8.2.11 的版本: 2:…

2023/9/13 -- C++/QT

作业&#xff1a; 1> 将之前定义的栈类和队列类都实现成模板类 栈&#xff1a; #include <iostream> #define MAX 40 using namespace std;template <typename T> class Stack{ private:T *data;int top; public:Stack();~Stack();Stack(const Stack &ot…

时序数据库 TimescaleDB 安装与使用

TimescaleDB 是一个时间序列数据库&#xff0c;建立在 PostgreSQL 之上。然而&#xff0c;不仅如此&#xff0c;它还是时间序列的关系数据库。使用 TimescaleDB 的开发人员将受益于专门构建的时间序列数据库以及经典的关系数据库 (PostgreSQL)&#xff0c;所有这些都具有完整的…

数据库与身份认证

1. 数据库的基本概念 1.1 什么是数据库 数据库&#xff08;database&#xff09;是用来组织、存储和管理数据的仓库。 当今世界是一个充满着数据的互联网世界&#xff0c;充斥着大量的数据。数据的来源有很多&#xff0c;比如出行记录、消费记录、浏览的网页、发送的消息…

防火墙(Firewall)

目录 一、概述 二、iptables 三、iptable的用法 一、概述 防火墙的作用 用于保护内网安全的一种设备 依据规则进行防护 用户定义规则 允许或拒绝外部用户访问 防火墙分类 逻辑上划分&#xff0c;防火墙可以大体分为主机防火墙和网络防火墙主机防火墙&#xff1a;针对…

Redis缓存设计与性能优化

多级缓存架构 缓存设计 缓存穿透 缓存穿透是指查询一个根本不存在的数据&#xff0c; 缓存层和存储层都不会命中&#xff0c; 通常出于容错的考虑&#xff0c; 如果从存储层查不到数据则不写入缓存层。缓存穿透将导致不存在的数据每次请求都要到存储层去查询&#xff0c; 失去…

WebDAV之π-Disk派盘 + BubbleUPnP

BubbleUPnP是一款功能强大的Android播放器,支持UPnP/DLNA多屏互动。它可以将手机内容投屏到电视大屏上,与家人和朋友一起共享。此外,BubbleUPnP还提供了丰富的音乐和影视资源,您可以在线搜索并播放喜欢的内容。 以下是BubbleUPnP的一些主要特点: 1. 支持Chromecast和转码…

在PHP8中向数组添加元素-PHP8知识详解

在php8中向数组添加元素有多种方法&#xff0c;在这里主要讲解几个常用的方法&#xff1a;使用方括号[]添加元素、使用array_unshift()函数&#xff0c;向数组的头部添加元素、使用array_push()函数&#xff0c;向数组的尾部添加元素、使用array_splice()函数添加元素。 1、使用…

【新版】系统架构设计师 - 软件架构设计<SOA与微服务>

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 架构 - 软件架构设计&#xff1c;SOA与微服务&#xff1e; 考点摘要 面向服务SOA&#xff08;★★★★&#xff09;微服务&#xff08;★★★★&#xff09; 基于/面向服务的&#xff08;SOA&#xff09; 在SO…