SpringBoot配置文件 —— 超详细全方位教程

🧸欢迎来到dream_ready的博客,📜相信您也对这篇博客也感兴趣o (ˉ▽ˉ;)

🧸祝诸君前程似锦,归来仍初心不忘!

📜Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习-CSDN博客

目录

1、配置文件的作用 / 什么是配置文件?

什么是配置文件

配置文件的作用?

常规作用

SpringBoot中配置文件的作用

2、SpringBoot中的配置文件及格式

3、配置文件的优先级

4、properties配置文件详解及语法

5、properties缺点分析

6、yml配置文件详解及语法

使用yml连接数据库

yml配置不同数据类型及null

7、读取配置文件

读取properties格式的配置文件

读取yml中的配置文件

8、value中的转义字符和单双引号

9、配置对象

10、配置集合

11、配置Map

12、yml 优缺点


1、配置文件的作用 / 什么是配置文件?

什么是配置文件

        配置文件是包含应用程序或系统配置信息的文件。这些文件通常用于存储和管理应用程序的设置,以便在运行时进行配置和自定义。配置文件可以采用不同的格式,如文本文件、JSON、XML、YAML等,具体格式取决于应用程序的需求和开发者的偏好。

        计算机上有数以千计的配置⽂件,我们使⽤的绝⼤多数软件,⽐如浏览器,微信,Idea,甚⾄电脑,手机,都离不开配置⽂件。我们可能永远不会直接与其中的⼤部分⽂件打交道,但它们确实以不同的形式散落在我们的计算机上,⽐如C:\Users, C:\Windows⽂件夹,以及各种 *.config, *.xml ⽂件

配置文件的作用?

常规作用

        配置⽂件主要是为了解决硬编码带来的问题, 把可能会发⽣改变的信息, 放在⼀个集中的地⽅, 当我们启动某个程序时, 应⽤程序从配置⽂件中读取数据, 并加载运⾏

硬编码是将数据直接嵌⼊到程序或其他可执⾏对象的源代码中, 也就是我们常说的“代码写死

使用配置文件,可以使程序完成用户和应用程序的交互,或者应用程序与其他应用程序的交互

SpringBoot中配置文件的作用

主要解决硬编码的问题,很多项目或者框架的配置信息也放在配置文件中,比如:

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

2、SpringBoot中的配置文件及格式

        SpringBoot⽀持并定义了配置⽂件的格式,也在另⼀个层⾯达到了规范其他框架集成到SpringBoot的⽬的

SpringBoot的配置文件,有三种格式

  • properties
  • yml
  • yaml

后两者其实是同一种类型的配置文件yml为yaml的简写,实际开发中出现频率最⾼. yaml 和yml 的使⽤⽅式⼀样

但事实上只支持三个文件(.前的命名必须是application这个单词)

  • applicaion.properties
  • applicaion.yml
  • applicaion.yaml

当然,后两者其实也是同一种文件

当应⽤程序启动时,Spring Boot会⾃动从classpath(类路径)中找到并加载

application.properties 和 application.yaml 或者 application.yml ⽂件.

如下图所示:


3、配置文件的优先级

  • 如果项目中,同时存在properties和yml配置文件,properties的优先级更高
  • 同时存在时,两个文件都生效
  • 如果两个文件中,都包含同一个配置,以properties为主

注:企业开发中,通常只使用其中一个文件


4、properties配置文件详解及语法

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

key的格式建议是小写,单词之间使用.分割

代码如下:

# 配置项⽬端⼝号
server.port=8080
# 配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&
spring.datasource.username=root
spring.datasource.password=root

注:配置文件中使用 “#” 来添加注释信息

本篇博客会讲解一部分常用配置信息,若想查看更多配置信息,可以参考官网

SpringBoot配置

5、properties缺点分析

properties 配置是以 key-value 的形式配置的,如下图所⽰:

从上述配置key看出,properties配置文件中会有很多冗余的信息

想要解决这个问题,就可以使用yml配置文件的格式化了(实际工作中也是yml用的更多)


6、yml配置文件详解及语法

yml 是 YAML 是缩写,它的全称 Yet Another Markup Language 翻译成中⽂就是“另⼀种标记语⾔.

yml基本语法:

  • yml 是树形结构的配置⽂件,它的基础语法是"key: value"
  • key 和 value 之间使⽤英⽂冒号加空格的⽅式组成,空格不可省略

基础语法如下:

第⼀项的配置为正确的,key 也是⾼亮显⽰的.,第⼆项没有空格是错误的使⽤⽅式,第⼆项的 key 也 没有⾼亮显⽰

使用yml连接数据库

yml使用举例:

ip地址,端口号,数据库库名(此处是mycnblog)要根据实际情况修改

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8&useSSL=falseusername: rootpassword: root

yml配置不同数据类型及null

# 字符串
String:value: hello# 布尔值,true或false
boolean:value1: truevalue2: false# 整数,只要最后的数字是整数就行,和前面的key名称没关系
int:value: 10# 浮点数,只要最后的数字是浮点数就行,和前面的key名称没关系
float:value: 3.14159# ~ 表示null,只要最后的符号是 ~ 就行,和前面的key名称没关系
null:value: ~# "" 空字符串
# '' 单引号也表示空字符串
# 冒号后面什么都不加也可以表示空字符串。但这种方式不直观,更多的表示是使用引号括起来
empty:value1: ''value2: ""value3: 

7、读取配置文件

读取properties格式的配置文件

如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤ @Value 注解来实现。 @Value 注解使⽤" ${} "的格式读取

properties 配置如下:

mykey.key1 = bite

读取代码如下:

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;}
}

最终执行效果

读取yml中的配置文件

yml 读取配置的⽅式和 properties 相同,使⽤ @Value 注解即可,@Value 注解使⽤" ${} "的格式读取

yml格式是换行有缩进的,去掉换行,缩进和冒号,每两个单词间用.分割,和properties书写格式一样

实现代码如下:

string:hello: bite

读取代码如下:

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

最终执行效果:


8、value中的转义字符和单双引号

此处以yml格式举例

  • 字符串默认不⽤加上单引号或者双引号。
  • 单引号会转义特殊字符,使其失去特殊功能,始终是⼀个普通的字符串. 
  • 双引号不会转义字符串⾥⾯的特殊字符,特殊字符会表⽰本⾝的含义
  • 此处的转义理解起来会有些拗, \n 本意表⽰的是换⾏
  • 使⽤单引号会转义, 就是说, \n 不再表⽰换⾏了, ⽽是表⽰⼀个普通的字符串
  • 使⽤双引号不会转义, 表⽰ \n 表⽰的是它本⾝的含义, 就是换⾏

代码举例:

String:str1: Hello \n Spring Boot.str2: 'Hello \n Spring Boot.'str3: "Hello \n Spring Boot."

读取代码如下: 

@RestController
public class ReadYml {@Value("${string.str1}")private String str1;@Value("${string.str2}")private String str2;@Value("${string.str3}")private String str3;@RequestMapping("/yml")public String readYml(){System.out.println(str1);System.out.println(str2);System.out.println(str3);return "yml";}
}

最终执行效果:


9、配置对象

此处以yml格式举例

要使⽤注解 @ConfigurationProperties 来读取,注解括号内属性填写key中的“老大”

student:id: 1name: Javaage: 18

或者是使⽤⾏内写法(与上⾯的写法作⽤⼀致):

student: {id: 1,name: Java,age: 18}

实体类定义如下:

注意 @ConfigurationProperties 的用法,用了prefix属性,并将key的“老大”赋值给它

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;// 下面这个注解起到读取配置文件对应内容并赋值给该类的操作
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {private int id;private String name;private int age;
}

调⽤类的实现如下:

@RestController
public class StudentController {@Autowiredprivate Student student;@RequestMapping("/readStudent")public String readStudent() {return student.toString();}
} 

最终执行效果:


10、配置集合

此处以yml格式举例

要使⽤注解 @ConfigurationProperties 来读取,注解括号内属性填写key中的“老大”

配置内容(注意格式):

-后一定要加空格

如果不加空格,这部分内容会变成一个整体,统一赋值给对应属性

dbtypes:name:- mysql- sqlserver- db2

实体类如下:

@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {private List<String> name;// 也可以使用数组来接收
//    private String[] name; 
}

访问集合的实现如下:

@RestController
public class ReadYml2 {@Autowiredprivate ListConfig listConfig;@RequestMapping("/readList")public String readList(){return listConfig.toString();}
}

11、配置Map

此处以yml格式举例

要使⽤注解 @ConfigurationProperties 来读取,注解括号内属性填写key中的“老大”

maptypes:map:k1: kk1k2: kk2k3: kk3

或者使用行内写法(与上面的写法作用一致):

maptypes: {map: {k1: kk1,k2: kk2, k3: kk3}}

 实体类如下:

@Component
@ConfigurationProperties("maptypes")
@Data
public class MapConfig {private HashMap<String,String> map;
}

访问Map的实现如下:

@RestController
public class ReadYml2 {@Autowiredprivate MapConfig mapConfig;@RequestMapping("/readMap")public String readStudent(){return mapConfig.toString();}
}

12、yml 优缺点

优点:

  • 可读性⾼,写法简单, 易于理解
  • ⽀持更多的数据类型, 可以简单表达对象, 数组, List,Map等数据形态.
  • ⽀持更多的编程语⾔, 不⽌是Java中可以使⽤, 在Golang, Python, Ruby, JavaScript中也可以使⽤

缺点:

  • 不适合写复杂的配置⽂件
  • 对格式有较强的要求(⼀个空格可能会引起⼀场⾎案)

不适合写复杂的配置⽂件如图:

🧸欢迎您于百忙之中阅读这篇博客,📜希望这篇博客给您带来了一些帮助,祝您生活愉快!

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

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

相关文章

【网络】TCP协议理论

TCP协议理论 一、TCP协议简介1、浅谈可靠性2、UDP协议存在的意义 二、TCP的协议格式TCP的解包和分用 三、确认应答机制一种应答方式——捎带应答 四、超时重传机制超时等待时间 五、流量控制1、TCP的缓冲区2、TCP的窗口大小3、TCP的PSH标志位 六、TCP的六个标志位URG字段的详细…

java DataSize存储容量单位规范化设置

之前的文章 java Duration格式规范化 自定义时间单位类型我们讲述了 Duration 这种jdk单位规范 其实我们还有一个单位 DataSize 我们这里属性类中 加入这个 DataSize的一个属性 然后设置他的 get set函数 然后 toString中加上他的输出 方便我们去看 这个类型是用来设置存储容…

[pytorch]设备选择以及卷积神经网络的应用

0.写在前面: 首先这篇文章还没写完,因为今天要尝试对我之前的一个框架做一个简单的更新迭代,所以目前先更新这么多. 1.关于设备的选择 首先,目前的大多数电脑都是自带一些GPU(图形计算单元,在这里被称之为cuda), 需要安装相关的驱动才能正常使用这些设备和调用他们的具体情况…

长安链可验证数据库,保证数据完整性的可信存证方案

近日&#xff0c;长安链发布“可验证数据库”实现了链上链下协同存储及数据完整性保证&#xff0c;显著提升长安链存储能力的可扩展性。 可信存证是联盟链最典型的应用场景&#xff0c;被广泛应用在司法、工业、农业、贸易等领域。联盟链的存证应用主要分为两个阶段&#xff1…

HarmonyOS开发(二):TypeScript入门

1、编程语言介绍 ArkTS是HarmonyOS主推的应用开发语言&#xff0c;它是在TypeScript语言的基础之上&#xff0c;匹配ArkUI框架&#xff0c;扩展了声明式UI、状态管理等相应的能力&#xff0c;让开发者以更简洁、更自然的方式开发跨端应用。 ArkTS、TypeScript和JavaScript之间…

机架式防雷PDU为IDC数据中心机房末端配电提供可靠保障

随着网络设备与各类通讯设备之间已经实现了智能化联网&#xff0c;取得的经济效益和社会效益逐步得到了体现。然而&#xff0c;由于雷电电磁脉冲感应造成的设备故障也越来越多&#xff0c;频繁的雷害对机房设备的正常工作造成了相当大的影响和危害&#xff0c;并给运行维护工作…

关于pip basicsr,facexlib,realesrgan et al.安装报错。

首先basicsr是一个超分的库&#xff0c;在ubuntu系统上pip时会报错。 上图这种错误&#xff0c;或者其他的错误&#xff0c;有的方法让去github上安装&#xff0c;那种方法到setup.py的时候也会报错。 问题在于首先 -i的源要换成阿里的源&#xff0c;然后要安装他要求的库&…

Java: 实现电影信息管理系统 (javaBean)

文章目录 电影信息系统1. 将JavaBean数据类封装好2.业务逻辑类3.测试类&#xff08;main函数类&#xff09; 电影信息系统 需求&#xff1a; 展示系统中的全部电影&#xff08;每部电影展示、名称、平分&#xff09;。允许用户根据电影编号&#xff08;id&#xff09;查询出某…

食醋行业分析:预计2029年将达到95亿美元

近年来中国食醋市场每年的销售量稳定增长&#xff0c;市场规模已经达到数百亿人民币。而在其他国家和地区&#xff0c;食醋也成为不可或缺的调味品之一&#xff0c;随着全球化和多样化的饮食趋势&#xff0c;国际市场对食醋的需求也不断增加。 食醋作为一种天然的酸味调节剂&am…

Springboot+vue的人力资源管理系统(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的人力资源管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的企业资产管理系统&#xff0c;采用M&#xff08;model&…

ds前后台博客系统

源码私信或者公众号java大师获取 博客简介&#xff1a;本博客采用Spring Boot LayUI做为基础&#xff0c;进行的博客系统开发&#xff0c;与bootvue相比&#xff0c;更为适合开发简单的系统&#xff0c;并且更容易上手&#xff0c;简单&#xff01;高效&#xff01;更易上手&a…

为什么审计平台不适合进行数据库变更管理?

关于视源电子 广州视源电子科技股份有限公司 (CVTE) 成立于 2005 年 12 月&#xff0c;旗下拥有多家业务子公司。 截至 2022 年底&#xff0c;公司总人数超 6000 人&#xff0c;约 60% 为技术人员。公司的主营业务为液晶显示主控板卡和交互智能平板等显控产品的设计、研发与销…

离散时间系统模型

离散时间系统模型 离散时间系统模型是表示数字滤波器的方案。MATLAB 科学计算环境支持若干种离散时间系统模型&#xff0c;这些模型将在以下章节中介绍&#xff1a; ​传递函数零极点增益状态空间部分分式展开式&#xff08;残差形式&#xff09;二阶节 (SOS)格型结构体卷积矩…

为什么笔记不收录,小红书作品收录逻辑分析!

小红书作品收录问题&#xff0c;是平台大家广泛关注的问题。这是因为&#xff0c;一篇作品是否被有效收录&#xff0c;将会直接决定作品所能捕获的流量。今天给大家分享下为什么笔记不收录&#xff0c;小红书作品收录逻辑分析&#xff01; 一、作品收录是指什么 小红书平台的作…

Kotlin Multiplatform稳定版本发布:加速跨平台开发的新里程碑

Kotlin Multiplatform稳定版本发布&#xff1a;加速跨平台开发的新里程碑 引言 在最新的消息中&#xff0c;JetBrains团队宣布Kotlin Multiplatform&#xff08;KMP&#xff09;将于2023年10月稳定发布。这一消息对于广大开发者来说毫无疑问是一个令人振奋的消息。KMP的正式生…

后端面试问题(学习版)

JAVA相关 JAVA语言概述 1. 一个".java"源文件中是否可以包含多个类&#xff1f;有什么限制&#xff1f; 可以。 一个源文件可以声明多个类&#xff0c;但是最多只能有一个类使用public进行声明 且要求声明public的类的类名与源文件相同。 2. Java的优势&#xff…

C++——const成员

这里先用队列举例&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include <assert.h> using namespace std; class SeqList { public:void pushBack(int data){if (_size _capacity){int* tmp (int*)realloc(a, sizeof(int) * 4);if (tm…

在以BUF,字节存储区中,存放有n个带符号整数。试编写统计其中负偶数个数(假设≤9)并且显示。

;默认认采用ML6.11汇编程序 DATAS SEGMENT;此处输入数据段代码BUF DB -2,2,3,4,-4N$-BUF DATAS ENDS STACKS SEGMENT;此处处输入堆栈段代码 STACKS ENDS CODES SEGMENTASSUME CS:CODES,DS: DATAS, SS:STACKS START:MOV AX, DATASMOV DS,AXMOV BX,0MOV CX,0 LOP: mov AX,[BX] RO…

【Java】集合(一)单列集合List

1.集合 可以动态保存任意多个对象&#xff0c;并提供了一系列的操作对象的方法&#xff1a;add、remove、set、get等。 2.集合框架体系 分为两大类&#xff1a; 单列集合和双列集合 3.List接口基本介绍 List接口是Collection接口的子接口 List集合类中元素有序&#xff0…

【LeetCode】每日一题 2023_11_13 区域和检索 - 数组可修改(树状数组/线段树)

文章目录 刷题前唠嗑题目&#xff1a;区域和检索 - 数组可修改题目描述代码与解题思路偷看大佬题解 结语 刷题前唠嗑 LeetCode? 启动&#xff01;&#xff01;&#xff01; 今天是中等题&#xff0c;貌似挺简单的&#xff0c;先试试水 题目&#xff1a;区域和检索 - 数组可修…