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

news2024/11/28 11:52:29

文章目录

    • 配置文件的作用
    • 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: 8080
  servlet:
    context-path: /myapp

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password

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

Properties配置文件

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

server.port=8080
server.servlet.context-path=/myapp

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

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

相关文章

解决Java应用程序中的SQLException:Access denied for user ‘root‘@‘localhost‘ 错误

目录 问题背景 解决方案 如何重置 MySQL root 密码&#xff1a; 问题背景 java.sql.SQLException: Access denied for user rootlocalhost (using password: YES) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:127) at com.mysql.cj.jdbc.ex…

树控件、下拉框、文本框常用测试用例

01 控件的测试外观操作 1&#xff09;项目中的所有树是否风格一致 2&#xff09;树结构的默认状态是怎样的。比如默认树是否是展开&#xff0c;是展开几级&#xff1f; 是否有默认的焦点&#xff1f;默认值是什么&#xff1f;展开的节点图标和颜色&#xff1f; 3&#xff09…

springboot整合actuator、admin对应用程序进行监控

Spring Boot Actuator 是 Spring Boot 的一个子项目&#xff0c;可以对 Spring Boot 应用程序进行监控和管理&#xff0c;并对外提供了大量的端点&#xff0c;可以选择使用 HTTP 端点或 JMX 来管理和监控应用程序。 这篇文章主要介绍我们的应用程序中怎么加入actuator来对应用进…

算法课程入门

1、算法这门课&#xff0c;主要讲这三件事&#xff1a; 状态空间 最优可行解问题。 确定与非确定。 状态空间的思维方式要掌握住&#xff0c;要能使用状态空间解决新问题。 2、课程安排&#xff1a; 前几本也要看&#xff0c;但是最后一本强烈推荐。 3、经验之谈&#xff1a; …

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

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

TypeScript泛型和类型体操

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 泛型&#xff08;Generics&#xff09; 1. 泛型函数 2. 泛型接口 3. 泛型类 类型体操&#xff08;Type Gymnast…

leetcode 232 用栈实现队列

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头…

Python实现天文计算

迷途小书童 读完需要 2分钟 速读仅需 1 分钟 1 简介 ephem 模块为 Python 提供了精确的天文计算能力&#xff0c;可以预测星球、卫星的轨道信息&#xff0c;计算日出日落、经星时间等数据&#xff0c;它的算法准确可靠。最初由 Brandon Craig Rhodes 在 20 世纪 90 年代开发&am…

数字IC验证23912--寄存器模型

文章目录 寄存器模型的集成总线UVC的实现总线UVC的示例Adapter的实现Adapter的集成 访问方式前门访问后门访问 寄存器模型的集成 总线UVC的实现 MCDF访问寄存器的总线接口时序较为简单。控制寄存器接口首先需要在每一个时钟解析cmd。当cmd为写指令时&#xff0c;即需要把数据c…

Linux安装mysql8.0.34(图文详细教程2023)

安装mysql数据库目录2023-09-13更新 1. 下载mysql数据库2. 安装3. mysql启动4. 进入数据库修改密码 以下是root用户操作&#xff0c; 非root用户&#xff0c;命令前请添加sudo 1. 下载mysql数据库 下载地址&#xff1a; https://dev.mysql.com/downloads/mysql/ 获取下载链接&…

OPENCV进行图像修复

API # -*- coding:utf-8 -*- """ 作者:794919561 日期:2023/9/14 """ import cv2 import numpy as npimg = cv2.imread("F:\\learnOpenCV\\openCVLearning\\pictures\\Lena.jpg") mask = cv2.imread

移动测试之语音识别功能如何测试?

移动测试之语音识别功能如何测试&#xff1f; 要知道语音识别功能如何测试&#xff0c;我们先了解智能产品语音交互流程&#xff1a; 所以&#xff0c;要进行测试的话&#xff0c;我们需要从以下几个维度来准备测试点&#xff1a; 基础功能测试&#xff1a; 1、声纹的录入&…

不定积分的概念和性质

目录 原函数 不定积分 不定积分的几何意义 原函数的存在定理 不定积分的性质 不定积分是微积分的一个关键部分&#xff0c;它涉及到一个函数的不定积分的计算。不定积分可以理解为求一个函数的原函数&#xff0c;也被称为反导数。原函数是一个函数&#xff0c;使得该函数的…

MongoDB-1入门介绍

NoSQL NoSQL(NoSQL Not Only SQL)&#xff0c;意即反SQL运动&#xff0c;指的是非关系型的数据库 优点 1、对数据库高并发读写。 2、对海量数据的高效率存储和访问。 3、对数据库的高可扩展性和高可用性。 弱点&#xff1a; 1、数据库事务一致性需求 2、数据库的写实时性…

多模态图像合成与编辑

由于信息在现实世界中以多种形式存在&#xff0c;多模态信息之间的有效交互和融合对于计算机视觉和深度学习研究中多模态数据的创建和感知起着关键作用。多模态图像合成与编辑由于具有强大的多模态信息交互建模能力&#xff0c;成为近年来的研究热点。多模态引导不是为网络训练…

点云从入门到精通技术详解100篇-从全局到局部的三维点云细节差异分析

目录 前言 国内外研究现状 细节差异分析相关研究 三维点云的相似性相关研究 存在的问题 三维点云对比的相关技术 2.1 三维点云的采集设备 2.2三维点云的存储格式 2.3三维点云的空间变换 2.4三维点云相似度分析 2.4.1点云特征的提取 2.4.2特征相似度计算 本文篇幅较长&#xff0…

解决java.util.NoSuchElementException

解决java.util.NoSuchElementException 解决java.util.NoSuchElementException摘要引言正文1. 了解异常的根本原因2. 避免不正确的索引3. 处理空集合4. 使用迭代器时要小心5. 异常处理 总结参考资料 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1f466;&…

博客-三更草堂

博客-三更草堂 后台分类页面修改&#xff0c;添加状态修改接口 ① …前端工程\sg-vue-admin\src\api\content\category.js 文件中添加新接口 // 修改分类状态 export function changeCategoryStatus(id, status) {const data {id,status}return request({url: /content/cat…

【编程实践】使用pcl提取给定点云的三维边界点

1 执行结果 原始点云可视化 搜索半径设置为0.1m 搜索半径设置为0.05m 2 代码实现 // boundary#include <pcl/point_types.h> #include <pcl/features/normal_3d.h> #include <pcl/features/boundary.h> #include <pcl/io/file_io.h> #include &l…

面对 HR 的空窗期提问,你会如何回答?

原文链接 面对 HR 的空窗期提问&#xff0c;你会如何回答&#xff1f; 你是否有过这样的经历&#xff0c;在一段时间内&#xff0c;你离开了工作岗位&#xff0c;或者在寻找新的工作机会&#xff0c;这段时间我们称之为“空窗期”。 对于这段时间&#xff0c;我们该如何看待&…