当前位置: 首页 > news >正文

二、SpringBoot3 配置文件

本章概要

  • 统一配置管理概述
  • 属性配置文件使用
  • YAML 配置文件使用
  • 批量配置文件注入
  • 多环境配置和使用

2.1 统一配置管理概述

SpringBoot工程下,进行统一的配置管理,你想设置的任何参数(端口号、项目根路径、数据库连接信息等等)都集中到一个固定位置和命名的配置文件(application.propertiesapplication.yml)中!
配置文件应该放置在Spring Boot工程的src/main/resources目录下。这是因为src/main/resources目录是Spring Boot默认的类路径(classpath),配置文件会被自动加载并可供应用程序访问。

在这里插入图片描述

功能配置参数说明:
https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties

细节总结:

  • 集中式管理配置。统一在一个文件完成程序功能参数设置和自定义参数声明 。
  • 位置:resources文件夹下,必须命名application后缀 .properties.yaml.yml
  • 如果同时存在application.properties | application.yml(.yaml) , properties的优先级更高。
  • 配置基本都有默认值。

在这里插入图片描述

2.2 属性配置文件使用

  1. 配置文件

resource文件夹下面新建application.properties配置文件

# application.properties 为统一配置文件
# 内部包含: 固定功能的key,自定义的key
# 此处的配置信息,我们都可以在程序中@Value等注解读取# 固定的key
# 启动端口号
server.port=80 # 自定义
spring.jdbc.datasource.driverClassName=com.mysql.cj.jdbc.driver
spring.jdbc.datasource.url=jdbc:mysql:///springboot_01
spring.jdbc.datasource.username=root
spring.jdbc.datasource.password=root
  1. 读取配置文件
package com.atguigu.properties;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class DataSourceProperties {@Value("${spring.jdbc.datasource.driverClassName}")private String driverClassName;@Value("${spring.jdbc.datasource.url}")private String url;@Value("${spring.jdbc.datasource.username}")private String username;@Value("${spring.jdbc.datasource.password}")private String password;// 生成get set 和 toString方法public String getDriverClassName() {return driverClassName;}public void setDriverClassName(String driverClassName) {this.driverClassName = driverClassName;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "DataSourceProperties{" +"driverClassName='" + driverClassName + '\'' +", url='" + url + '\'' +", username='" + username + '\'' +", password='" + password + '\'' +'}';}
}
  1. 测试效果

controller注入,输出进行测试

@Autowired
private DataSourceProperties dataSourceProperties ;@RequestMapping(path = "/hello")
public String sayHello() {System.out.println(dataSourceProperties);return "Hello Spring Boot ! " ;
}

浏览器访问路径,控制台查看效果
在这里插入图片描述

2.3 YAML 配置文件使用

  1. yaml 格式介绍

YAML(YAML Ain’t Markup Language)是一种基于层次结构的数据序列化格式,旨在提供一种易读、人类友好的数据表示方式。

.properties文件相比,YAML格式有以下优势:

  • 层次结构:YAML文件使用缩进和冒号来表示层次结构,使得数据之间的关系更加清晰和直观。这样可以更容易理解和维护复杂的配置,特别适用于深层次嵌套的配置情况。
  • 自我描述性:YAML文件具有自我描述性,字段和值之间使用冒号分隔,并使用缩进表示层级关系。这使得配置文件更易于阅读和理解,并且可以减少冗余的标点符号和引号。
  • 注释支持:YAML格式支持注释,可以在配置文件中添加说明性的注释,使配置更具可读性和可维护性。相比之下,.properties文件不支持注释,无法提供类似的解释和说明。
  • 多行文本:YAML格式支持多行文本的表示,可以更方便地表示长文本或数据块。相比之下,.properties文件需要使用转义符或将长文本拆分为多行。
  • 类型支持:YAML格式天然支持复杂的数据类型,如列表、映射等。这使得在配置文件中表示嵌套结构或数据集合更加容易,而不需要进行额外的解析或转换。
  • 更好的可读性:由于YAML格式的特点,它更容易被人类读懂和解释。它减少了配置文件中需要的特殊字符和语法,让配置更加清晰明了,从而减少了错误和歧义。

综上所述,YAML格式相对于.properties文件具有更好的层次结构表示、自我描述性、注释支持、多行文本表示、复杂数据类型支持和更好的可读性。这些特点使YAML成为一种有力的配置文件格式,尤其适用于复杂的配置需求和人类可读的场景。然而,选择使用YAML还是.properties取决于实际需求和团队的偏好,简单的配置可以使用.properties,而复杂的配置可以选择YAML以获得更多的灵活性和可读性

  1. yaml 语法说明
  • 数据结构用树形结构呈现,通过缩进来表示层级,
  • 连续的项目(集合)通过减号-来表示
  • 键值结构里面的key/value对用冒号:来分隔。
  • YAML配置文件的扩展名是yamlyml

例如:

# YAML配置文件示例
app_name: 我的应用程序
version: 1.0.0
author: 张三database:host: localhostport: 5432username: adminpassword: password123features:- 登录- 注册- 仪表盘settings:analytics: truetheme: dark
  1. 配置文件
spring:jdbc:datasource:driverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql:///springboot_02username: rootpassword: rootserver:port: 80
  1. 读取配置文件

读取方式和properties一致

package com.atguigu.properties;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class DataSourceProperties {@Value("${spring.jdbc.datasource.driverClassName}")private String driverClassName;@Value("${spring.jdbc.datasource.url}")private String url;@Value("${spring.jdbc.datasource.username}")private String username;@Value("${spring.jdbc.datasource.password}")private String password;// 生成get set 和 toString方法public String getDriverClassName() {return driverClassName;}public void setDriverClassName(String driverClassName) {this.driverClassName = driverClassName;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "DataSourceProperties{" +"driverClassName='" + driverClassName + '\'' +", url='" + url + '\'' +", username='" + username + '\'' +", password='" + password + '\'' +'}';}
}
  1. 测试效果

controller注入,输出进行测试

@Autowired
private DataSourceProperties dataSourceProperties ;@RequestMapping(path = "/hello")
public String sayHello() {System.out.println(dataSourceProperties);return "Hello Spring Boot ! " ;
}

浏览器访问路径,控制台查看效果

在这里插入图片描述

2.4 批量配置文件注入

@ConfigurationPropertiesSpringBoot提供的重要注解, 他可以将一些配置属性批量注入到bean对象。

  1. 创建类,添加属性和注解

在类上通过@ConfigurationProperties注解声明该类要读取属性配置
prefix="spring.jdbc.datasource"读取属性文件中前缀为spring.jdbc.datasource的值。前缀和属性名称和配置文件中的key必须要保持一致才可以注入成功

package com.atguigu.properties;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "spring.jdbc.datasource")
public class DataSourceConfigurationProperties {private String driverClassName;private String url;private String username;private String password;public String getDriverClassName() {return driverClassName;}public void setDriverClassName(String driverClassName) {this.driverClassName = driverClassName;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "DataSourceConfigurationProperties{" +"driverClassName='" + driverClassName + '\'' +", url='" + url + '\'' +", username='" + username + '\'' +", password='" + password + '\'' +'}';}
}
  1. 测试效果
@RestController
public class HelloController {@Autowiredprivate DataSourceProperties dataSourceProperties;@Autowiredprivate DataSourceConfigurationProperties dataSourceConfigurationProperties;@GetMapping("/hello")public String hello(){System.out.println("dataSourceProperties = " + dataSourceProperties);System.out.println("dataSourceConfigurationProperties = " + dataSourceConfigurationProperties);return "Hello,Spring Boot 3!";}
}

2.5 多环境配置和使用

  1. 需求

Spring Boot中,可以使用多环境配置来根据不同的运行环境(如开发、测试、生产)加载不同的配置。SpringBoot支持多环境配置让应用程序在不同的环境中使用不同的配置参数,例如数据库连接信息、日志级别、缓存配置等。

以下是实现Spring Boot多环境配置的常见方法:

  1. 属性文件分离:将应用程序的配置参数分离到不同的属性文件中,每个环境对应一个属性文件。例如,可以创建application-dev.propertiesapplication-prod.propertiesapplication-test.properties等文件。在这些文件中,可以定义各自环境的配置参数,如数据库连接信息、端口号等。然后,在application.properties中通过spring.profiles.active属性指定当前使用的环境。Spring Boot会根据该属性来加载对应环境的属性文件,覆盖默认的配置。
  2. YAML配置文件:与属性文件类似,可以将配置参数分离到不同的YAML文件中,每个环境对应一个文件。例如,可以创建application-dev.ymlapplication-prod.ymlapplication-test.yml等文件。在这些文件中,可以使用YAML语法定义各自环境的配置参数。同样,通过spring.profiles.active属性指定当前的环境,Spring Boot会加载相应的YAML文件。
  3. 命令行参数(动态):可以通过命令行参数来指定当前的环境。例如,可以使用--spring.profiles.active=dev来指定使用开发环境的配置。

通过上述方法,Spring Boot会根据当前指定的环境来加载相应的配置文件或参数,从而实现多环境配置。这样可以简化在不同环境之间的配置切换,并且确保应用程序在不同环境中具有正确的配置。

  1. 多环境配置

创建开发、测试、生产三个环境的配置文件

application-dev.yml(开发)

spring:jdbc:datasource:driverClassName: com.mysql.cj.jdbc.Driverurl: jdbc:mysql:///devusername: rootpassword: root

application-test.yml(测试)

spring:jdbc:datasource:driverClassName: com.mysql.cj.jdbc.Driverurl: jdbc:mysql:///testusername: rootpassword: root

application-prod.yml(生产)

spring:jdbc:datasource:driverClassName: com.mysql.cj.jdbc.Driverurl: jdbc:mysql:///produsername: rootpassword: root
  1. 环境激活
spring:profiles:active: dev
  1. 测试效果

在这里插入图片描述

注意 :

  • 如果设置了spring.profiles.active,并且和application有重叠属性,以active设置优先。
  • 如果设置了spring.profiles.active,和application无重叠属性,application设置依然生效!

相关文章:

二、SpringBoot3 配置文件

本章概要 统一配置管理概述属性配置文件使用YAML 配置文件使用批量配置文件注入多环境配置和使用 2.1 统一配置管理概述 SpringBoot工程下,进行统一的配置管理,你想设置的任何参数(端口号、项目根路径、数据库连接信息等等)都集中到一个固定…...

二、阅读器的开发(初始)-- 2、阅读器开发

1、epubjs核心工作原理 1.1 epubjs的核心工作原理解析 epub电子书,会通过epubjs去实例化一个Book对象,Book对象会对电子书进行解析。Book对象可以通过renderTo方法去生成一个Rendition对象,Rendition主要负责电子书的渲染,通过R…...

【QT入门】 Qt自定义信号后跨线程发送信号

往期回顾: 【QT入门】 lambda表达式(函数)详解-CSDN博客 【QT入门】 Qt槽函数五种常用写法介绍-CSDN博客 【QT入门】 Qt实现自定义信号-CSDN博客 【QT入门】 Qt自定义信号后跨线程发送信号 由于Qt的子线程是无法直接修改ui,需要发送信号到ui线程进行修改…...

51单片机学习笔记7 串转并操作方法

51单片机学习笔记7 串转并操作方法 一、串转并操作简介二、74HC595介绍1. **功能**:2. **引脚**:3. **工作原理**:4. 开发板原理图(1)8*8 LED点阵:(2)74HC595 串转并: 三…...

微服务cloud--抱团取暖吗 netflix很多停更了

抱团只会卷,卷卷也挺好的 DDD 高内聚 低耦合 服务间不要有业务交叉 通过接口调用 分解技术实现的复杂性,围绕业务概念构建领域模型;边界划分 业务中台: 数据中台: 技术中台: 核心组件 eureka&#x…...

牛客笔试|美团2024春招第一场【测试方向】

第一题:小美的数组询问 小美拿到了一个由正整数组成的数组,但其中有一些元素是未知的(用 0 来表示)。 现在小美想知道,如果那些未知的元素在区间 [l, r] 范围内随机取值的话,数组所有元素之和的最小值和最大…...

Docker搭建LNMP环境实战(一):前言

缘起:不久前学习了Docker相关知识,并在Docker环境下学习了LNMP环境的搭建。由于网上的文章大多没有翔实、可行的案例,很多文章都是断章取义,所以,期间踩了太多太多的坑,初学者想要真正顺利地搭建一套环境起…...

SCI一区 | Matlab实现PSO-TCN-BiGRU-Attention粒子群算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现PSO-TCN-BiGRU-Attention粒子群算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现PSO-TCN-BiGRU-Attention粒子群算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型描述…...

界面控件DevExpress ASP.NET Ribbon组件 - 完美复刻Office 365体验!

无论用户是喜欢传统工具栏菜单外观、样式,还是想在下一个项目中复制Office 365 web UI,DevExpress ASP.NET都提供了所需要的工具,帮助用户打造更好的应用程序界面。 P.S:DevExpress ASP.NET Web Forms Controls拥有针对Web表单&a…...

vue2【详解】mixins —— 抽离公共逻辑

mixins 用于在 Vue 中便捷复用变量、方法、组件引用、生命周期等 使用方法 创建文件myMixin.js export const myMixin {data() {return {webName: 朝阳的博客}},created() {alert(欢迎来到${this.webName})},methods: {hi() {alert(欢迎来到${this.webName})}} }vue文件中引入…...

ArrayList的常用方法

ArrayList是Java中常用的动态数组类&#xff0c;它提供了一系列用于操作和管理数组的方法。下面是一些ArrayList常用方法的介绍&#xff1a; add()方法&#xff1a;向ArrayList中添加元素&#xff0c;可以指定位置添加元素或者在末尾添加元素。 ArrayList<String> list …...

ES-Hadoop:将Elasticsearch与Hadoop无缝集成的开源工具

hadoop 大数据技术之Hive&#xff08;3&#xff09;PyHive pyhdfs ES,Elasticsearch https://zhuanlan.zhihu.com/p/595505475?utm_id0 Hadoop hdfs 、hive、spark https://blog.51cto.com/u_16099278/6901638 ES-Hadoop&#xff1a;将Elasticsearch与Hadoop无缝集成的开源工…...

质量模型、软件测试流程和测试用例

质量模型 衡量一个优秀软件的维度 可以从功能性、性能、兼容性、易用性、安全、可靠性、可维护性、可移植性这几个方面去做软件测试&#xff0c;但咱们在正常测试中一般是选取前五项进行测试 测试流程 1、需求评审&#xff1a;确保各部门对需求的理解一致 2、测试计划编写&a…...

集简云新增“文本语音转换”功能,实现智能语音交互

为丰富人工智能领域的应用集成&#xff0c;为用户提供更便捷和智能化的信息获取和视觉创作方式&#xff0c;本周集简云上线了内置应用—文本语音转换。目前支持OpenAI TTS和TTS HD模型&#xff0c;实现文本语音高效智能转换&#xff0c;也可根据你的产品或品牌创建独特的神经网…...

图像处理领域专业术语

图像处理中的一些常见术语&#xff0c;涵盖了从基础概念到高级处理技术的各个方面。 以下是一些图像处理领域常用的专业术语及其解释&#xff1a; 像素&#xff08;Pixel&#xff09;&#xff1a; 图像的最基本单元&#xff0c;每个像素都有一个或多个与其关联的数值&#xff0…...

Microsoft Edge 中的 Internet Explorer 模式解决ie禁止跳转到edge问题

作为网工&#xff0c;网络中存在很老的设备只能用ie浏览器访问打开&#xff0c;但是win10后打开Internet Explorer 会强制跳转到Edge 浏览器&#xff0c;且有人反馈不会关&#xff0c;为此找到了微软官方的Microsoft Edge 中的 Internet Explorer 模式&#xff0c;可以直接在Mi…...

理清大数据技术与架构

大数据并不是一个系统软件&#xff0c;更不是一个单一的软件&#xff0c;它实际上是一种技术体系、一种数据处理方法&#xff0c;甚至可以说是一个服务平台。在这个技术体系中&#xff0c;涵盖了许多不同的部件&#xff0c;比如Hadoop服务平台。这一服务平台可以根据具体情况自…...

小白DB补全计划Day2-LeetCode:SQL基本操作selectJOIN

链接&#xff1a;1683. 无效的推文 - 力扣&#xff08;LeetCode&#xff09;1378. 使用唯一标识码替换员工ID - 力扣&#xff08;LeetCode&#xff09;1068. 产品销售分析 I - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 1683 # Write your MySQL quer…...

【Node.js从基础到高级运用】十五、单元测试与集成测试

引言 在Node.js开发过程中&#xff0c;测试是确保代码质量和功能正确性的关键步骤。单元测试和集成测试是最常见的测试类型。下面我们将使用Jest框架来进行测试。 单元测试 单元测试是指对软件中的最小可测试单元进行检查和验证。在Node.js中&#xff0c;这通常指的是函数或者…...

哈工大sse C语言 困难

Q565.(10分数, 语言: C)程序中函数 fun()的功能: 将一个由八进制数字字符组成的字符串转换为与其值相等的十进制整数。规定输入的字符串最多只能包含5位八进制数字字符。 **输入格式要求&#xff1a;gets 提示信息&#xff1a;"输入一个八进制字符串&#xff08;5位&…...

告别繁琐刷课!5分钟掌握Autovisor智慧树自动学习终极指南

告别繁琐刷课&#xff01;5分钟掌握Autovisor智慧树自动学习终极指南 【免费下载链接】Autovisor 2025智慧树刷课脚本 基于Python Playwright的自动化程序 [有免安装版] 项目地址: https://gitcode.com/gh_mirrors/au/Autovisor 你是否厌倦了每天守在电脑前刷智慧树课程…...

Python 测验

Python 测验 引言 Python 作为一种高级编程语言,因其简洁易读、功能强大等特点,在编程领域备受青睐。为了帮助读者检验自己对 Python 的掌握程度,本文特此推出一份 Python 测验。本测验涵盖了 Python 的基础知识、常用库以及高级特性,旨在帮助读者全面了解 Python 的应用…...

Phi-4-mini-reasoning完整教程:含端口映射、域名绑定、SSL证书配置

Phi-4-mini-reasoning完整教程&#xff1a;含端口映射、域名绑定、SSL证书配置 1. 平台介绍 Phi-4-mini-reasoning 是一个专注于推理任务的文本生成模型&#xff0c;特别适合处理数学题、逻辑题、多步分析和简洁结论输出。与通用聊天模型不同&#xff0c;它采用"题目输入…...

Next 26: 一场定义未来的云端与 AI 盛宴,即将开启!

以下文章来源于谷歌云服务&#xff0c;作者 Google Cloud左右滑动查看更多 点击屏末 | 阅读原文 | 直达官网...

生信文件格式全解析:从fasta到bed的实战指南

1. 生信文件格式入门&#xff1a;为什么需要关注文件格式&#xff1f; 刚接触生物信息学的小伙伴们&#xff0c;经常会遇到这样的困惑&#xff1a;为什么同样的数据会有fasta、fastq、bam这么多不同格式&#xff1f;我刚开始做数据分析时&#xff0c;就曾经因为用错文件格式导致…...

Redis如何优雅地记录缓存命中率报表

应直接用keyspace_hits和keyspace_misses计算实时命中率&#xff0c;因INFO中的hit_rate仅为临时近似值且不更新&#xff0c;无法反映动态变化。怎么用 Redis INFO 命令实时抓取命中率数据Redis 本身不提供「按时间窗口聚合」的命中率报表&#xff0c;但 INFO stats 里有现成的…...

权威公布!AI时代剪辑学习秘籍,效率直接拉满!

我是深圳市好青春教育的技术老师&#xff0c;在AI时代&#xff0c;很多小伙伴对学习视频剪辑存在诸多疑问和困惑。比如&#xff0c;学习视频剪辑难不难&#xff1f;需要具备哪些基础&#xff1f;怎样才能快速掌握剪辑技术&#xff1f;进入这个行业有哪些途径&#xff1f;又该如…...

MySQL超详细安装教程(保姆级)

1.官网下载mysql安装包 MySQL &#xff1a;&#xff1a; 下载MySQL社区服务器https://dev.mysql.com/downloads/mysql/ 2.下载完成后解压到一个文件夹 注意:不带中文 这个路径要记住,我们等下会用到 3.添加环境变量 环境变量里面有很多选项&#xff0c;这里我们只用到Path这…...

GLM-4.1V-9B-Base实战案例:会议纪要截图→待办事项→中文结构化提取

GLM-4.1V-9B-Base实战案例&#xff1a;会议纪要截图→待办事项→中文结构化提取 1. 项目背景与需求 在日常工作中&#xff0c;我们经常需要处理各种会议纪要截图。这些图片通常包含大量文字信息&#xff0c;需要人工整理成结构化待办事项。传统方法需要手动输入或复制粘贴&am…...

STM32裸机开发框架设计与优化实践

1. 项目概述&#xff1a;无OS的MCU开发框架设计理念在嵌入式开发领域&#xff0c;基于MCU&#xff08;微控制器单元&#xff09;的设备往往受限于资源约束&#xff0c;无法运行完整的操作系统。这时候&#xff0c;一个精心设计的裸机&#xff08;bare-metal&#xff09;软件框架…...