SpringBoot 配置文件

前言:

本篇主要介绍两种配置文件格式,分别为properties与yml(yaml)。

需要注意的是:

  1. 两个配置文件从功能上来讲是可以同时存在的,但是企业中通常会规定使用某一种格式的配置文件。
  2. 如果同一个配置出现在两种格式的配置文件中的话,那么以properties为主。

目录

一、配置文件的作用

二、配置文件的格式

三、properties配置文件说明

3.1 properties基本语法

3.2 读取配置文件

3.3 properties缺点分析

四、yml配置文件说明

4.1 yml基本语法

4.2 读取配置文件

4.3 yml优点分析

4.4 yml配置不同数据类型及null

4.5 yml中的单双引号问题

4.6 yml配置对象

五、properties VS yml

六、设置不同环境的配置文件


一、配置文件的作用

整个项目中所有的重要的数据都是在配置文件中配置的,比如:

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

配置文件可以定义应用程序的属性,日志,数据源等各种方面的配置。在应用程序启动时,SpringBoot会自动加载并解析这些配置文件,并将配置信息注入到应用程序的各个组件中。

二、配置文件的格式

Spring Boot 配置文件主要分为以下两种格式:

  • .properties
  • .yml

如下图所示:

其中properties文件于yml就是一个旧版本和新版本的区别,就像小米6和小米13一样,yml文件相比于properties文件做了一些优化,如yml文件天然支持中文字符,而properties文件默认不支持中文字符,如果不进行字符配置的话,那么输入的中文字符就会乱码。

如何配置properties文件默认字符编码呢?

过程如下图所示:

需要注意的是:设置两个Settings,一个是当前项目的配置文件,另一个是所有新项目的配置文件:

在设置完成后需要删除原先的application.properties,创建一个新的application.properties。

说明:

  • 理论上讲properties可以和yml一起存在于一个项目中,当properties和yml一起存在一个项目中时,如果配置文件中出现了同样的配置,比如properties和yml中都配置了”server.port“,那么这个会以properties中的配置为主,也就是.properties配置文件的优先级最高,但加载完.properties文件之后,也会加载.yml文件的配置信息。
  • 虽然理论上来讲.properties可以和.yml共存,但在实际业务中,我们通常会采取一种统一的配置文件格式,这样可以更好的维护(降低故障率)。

三、properties配置文件说明

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

3.1 properties基本语法

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

# 配置项⽬端⼝号
server.port=8084
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=
utf8
spring.datasource.username=root
spring.datasource.password=root

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

3.2 读取配置文件

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

package com.example.demo.component;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
public class ReadProperties {
    @Value("${server.port}")
    private String port;

    @PostConstruct
    public void postConstruct() {
        System.out.println("Read Properties:" +port);
    }
}

@Component在String Boot启动时候会注入到框架中,注入到框架中时会执行@PostConstruct初始化方法,这个时候就能读取到配置信息了。

3.3 properties缺点分析

properties配置是以key-value的形式配置的,如下图所示,缺点显而易见,书写代码的时候可能会产生许多冗余的代码:

这也因如此,才有了yml配置文件的产生。

四、yml配置文件说明

yml是YAML的缩写,其全称为 Yet Another Markup Language 翻译成中文——"另一种标记语言"。

4.1 yml基本语法

基本语法为"key: value",注意这里key和value之间使用英文冒号+空格的方式组成的,其中的空格不可省略。

小提示:观察以下代码,其中红色方框中的第一项是错误的实例,于是key就没有高亮提示,而第二项由于是正确的格式,所以有高亮提示。

4.2 读取配置文件

读取yml配置文件的方式与properties配置文件一样,代码无需做出改变。

4.3 yml优点分析

  • 可读性高
  • 支持更多数据类型
  • 可以跨语言使用,Python,Go等语言都使用yml

4.4 yml配置不同数据类型及null

# 字符串
string.value: Hello
# 布尔值,true或false
boolean.value: true
boolean.value1: false
# 整数
int.value: 10
int.value1: 0b1010_0111_0100_1010_1110 # ⼆进制
# 浮点数
float.value: 3.14159
float.value1: 314159e-5 # 科学计数法
# Null,~代表null
null.value: ~

4.5 yml中的单双引号问题

配置文件代码如下:

我们将这些配置信息注入到一个类中,我们尝试来读取它们:

根据控制台的信息我们可以得出:

被双引号所包裹的值,按照原语义来执行,而被单引号包裹或不包裹的值会发生转义,像上面例子中就是 \n 被转义为\\n,所以就输出了\n。

这里的RestController是@Controller和@ResponseBody的组合注解,用于标记 一个类是SpringMVC的控制器并且默认返回JSON格式的响应结果。

4.6 yml配置对象

我们还可以在yml中配置对象,如下配置:

student:
  id: 1
  name: zhangsan
  age: 19

或者使用 行内写法 也行,与上述代码作用相同:

这时不需要使用@Value来读取配置中的对象了,此时要使用另一个注解:@ConfigurationProperties来读取,具体实现如下:

package com.example.demo.component;

import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties("student")
@Setter
@Getter
@ToString
public class StudentComponent {
    private int id;
    private String name;
    private int age;
}

利用@Autowired来读取StudentComponent类:

在控制台中打印如下: 

  需要注意的是,由于代码会在Spring启动的时候获取属性来设置这个类,所以Setter方法不能缺少,缺少就会报错,Getter和ToString方法根据具体情况分析。

五、properties VS yml

  • properties 是以 key=value 的形式配置的键值类型的配置⽂件,⽽ yml 使⽤的是类似 json 格式的树形配置⽅式进⾏配置的,yml 层级之间使⽤换⾏缩进的⽅式配置,key 和 value 之间使⽤“: ”英⽂冒号加空格的⽅式设置,并且空格不可省略。
  • properties 为早期并且默认的配置⽂件格式,但其配置存在⼀定的冗余数据,使⽤ yml 可以很好的解决数据冗余的问题。
  • yml 通⽤性更好,⽀持更多语⾔,如 Java、Go、Python 等,如果是云服务器开发,可以使⽤⼀份配置⽂件作为 Java 和 Go 的共同配置⽂件。
  • yml ⽀持更多的数据类型。
     

更多的系统配置项可参考官方文档:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html

六、设置不同环境的配置文件

我们知道,在企业的开发环境中,往往一个项目是需要多个配置文件的,因为需要在多种环境下来运行项目来完成相应的目的:开发环境下——开发配置文件,生产环境下——生产配置文件,测试环境下的——测试配置文件。

如下图所示:

一般我们会在主配置文件下,攥写开发环境、生产环境、测试环境中相同的代码,这样可以减少代码的冗余性。

可能有人问:这么多配置文件,那项目启动的时候,应该执行哪个呢?全部执行还是部分执行呢?

在SpringBoot项目中,如果有多个配置文件,如application-dev.yml、application-test.yml、application.yml、application-prod.yml等。其中application.yml为主配置文件。

当项目启动的时候,会根据激活的profile加载对应的配置文件,其中还会覆盖主文件中相同的配置项(在设计上,主文件不应该允许有跟其他配置文件相同的项),如果没有激活profile,则只会加载主配置文件。

可以通过spring.profiles.active中设置指定要激活的配置文件的名称,如果需要激活多个配置文件的话,中间使用逗号分割。

(以下为伪代码,因为生产环境和测试环境的配置文件一波情况下,不会一起执行)

那什么情况下主配置文件需要一次性激活多个配置文件呢?

在一些复杂的应用场景下,可能需要使用多个配置文件来管理应用的配置信息,而这些配置文件中可能包含了相互依赖的配置项,需要同时加载才能正常运行。此时,主配置文件需要一次性激活多个配置文件,以确保应用的正常运行。例如,在一个大型分布式系统中,可能需要使用多个配置文件来管理各个组件的配置信息,而这些组件的配置项可能是相互依赖的,需要同时加载才能确保整个系统的正常运行。

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

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

相关文章

微波方向有哪些SCI期刊推荐? - 易智编译EaseEditing

微波方向的SCI期刊推荐包括: IEEE Transactions on Microwave Theory and Technology: 该期刊是电磁场与微波技术领域的著名期刊,被世界上许多研究机构和大学广泛引用。 IEEE Transactions on Antennas and Propagation: 该期刊…

English Learning - L3 作业打卡 Lesson1 Day5 2023.5.9 周二

English Learning - L3 作业打卡 Lesson1 Day5 2023.5.9 周二 引言🍉句1: Fast loud music is popular with many people .成分划分爆破语调 🍉句2: They may say the music is red hot, especially the kind called Dixieland jazz.成分划分爆破语调 &a…

AI孙燕姿项目实现

最近在b站刷到很多关于ai孙笑川唱的歌曲,加上最近大火的ai孙燕姿, 这下“冷门歌手”整成热门歌手了 于是写下一篇文章, 如何实现属于的ai歌手。 注意滥用ai,侵犯他人的名誉是要承担法律责任的 下面是一些所需的文件链接&#xff…

低代码信创开发核心技术(一):基于Vue.js的描述依赖渲染DDR实现模型驱动的组件

前言 随着数字化转型的不断发展,低代码开发平台已成为企业快速建立自己的应用程序的首选方案。然而,实现这样一个平台需要具备高效、灵活和可定制化的能力。这正是基于描述依赖渲染(Description dependency rendering)所实现的。…

C语言CRC-16 XMODEM格式校验函数

C语言CRC-16 XMODEM格式校验函数 CRC-16校验产生2个字节长度的数据校验码,通过计算得到的校验码和获得的校验码比较,用于验证获得的数据的正确性。基本的CRC-16校验算法实现,参考: C语言标准CRC-16校验函数。 不同应用规范通过对…

三分钟阿里云服务器u1通用算力型性能、使用限制及费用说明

阿里云服务器u1是通用算力型云服务器,CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器,通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xff0c…

C/C++每日一练(20230512) 成绩打印、补齐数组、水仙花数

目录 1. 成绩打印 ※ 2. 按要求补齐数组 🌟🌟🌟 3. 水仙花数 ※ 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 成绩打印 一个班有10个同学&am…

隐语v0.8.2版本更新,首次发布TEEU

隐语v0.8.2版本更新🌟 应用层 机器学习: - MPC 纵向 LR (SSRegression)新增 Policy SGD 优化器和 Early Stopping 支持,减少调参成本,加快收敛速度; - WOE 分箱进行了若干优化,性…

本地搭建wamp服务器并内网穿透实现无公网IP远程访问

文章目录 前言1.Wamp服务器搭建1.1 Wamp下载和安装1.2 Wamp网页测试 2. Cpolar内网穿透的安装和注册2.1 本地网页发布2.2 Cpolar云端设置2.3 Cpolar本地设置 3. 公网访问测试4. 结语 转载自cpolar极点云的文章:无公网IP?教你在外远程访问本地Wamp服务器「…

前端CSS学习(三)

1、盒子模型 盒子的概念1、页面中的每一个标签,都可看做是一 个“盒子” ,通过盒子的视角更方便的进行布局2、浏览器在渲染 (显示)网页时,会将网页中的元素看做是一个个的矩形区域,我们也形象的称之为盒子CSS中规定每个盒子分别由…

Postman安装及入门接口测试使用步骤

前言 在软件测试行业中,作为一款比jemter更便捷更好用的软件测试工具,postman以其便捷灵活性首当其冲,成为当今测试行业领域使用较广泛的主流系统软件接口测试工具。今天Darren洋为大家讲解postman这款软件测试工具的下载安装及入门接口测试步…

Linux权限 - 概念与管理 | 文件权限的修改与转让 【详解】

目录 Linux权限 Linux权限的概念 Linux权限的基础操作 (1).实现用户账号的切换 (2).仅提升当前指令的权限 Linux权限管理 1、文件访问者的分类(人) 2、文件类型和访问权限(事物属性) 3、文件权限值的表示方法 4、文件访…

刷题刷题。

自然数拆分 利用step记录组合情况,只用sum不能判断组合情况 1.选择dfs原因:产生排列组合,和为7,step为8,其中7个空位,第8个step为输出; 参量的设置sum,step (进入下一层)…

ThingsBoard教程(四十):规则节点解析 计算增量节点 Calculate delta

本篇文章介绍一个ThingsBoard 规则引擎中的一个节点,Calculate delta Calculate delta 计算增量 该节点可以在规则中获取上一次遥测的值,以此可以实现二次遥测的差。比如一个设备,一天上传一次数据,如果你要对比今天和昨天的数据,并将两者数据差保存到数据库,就能够使用…

Spring MVC

目录 什么是Spring MVC MVC定义 MVC和Spring MVC的关系 怎么学Spring MVC 创建Spring MVC项目 0.使用Spring Boot来创建Spring MVC项目 1.实现连接 2.获取参数 获取单个参数 获取多个参数 获取对象 后端参数重命名 获取JSON对象 从基础的URL中获取参数 上传文件Re…

1688获取商品api接口

作为一名技术爱好者,我们总会遇到各种各样的技术问题,需要寻找合适的技术解决方案。而在互联网时代,我们可以快速通过搜索引擎获取丰富的技术资源和解决方案。然而,在不同的技术分享中,我们常常会遇到质量参差不齐的文…

linux中查看某个文件夹下文件的个数和大小

一、统计某个目录的文件和子目录的大小 1、stat指令 stat命令 主要用于显示文件或文件系统的详细信息,该命令的语法格式如下: -f  不显示文件本身的信息,显示文件所在文件系统的信息-L  显示符号链接-t  简洁模式,只显示…

如何压缩pdf文件大小?四种方法随意选择

如何压缩pdf文件大小?PDF文件格式由于其跨平台性,易于浏览、打印和传输等特点,在现代社会中广泛应用于各个领域。然而,随着PDF文件越来越大,传输及存储所需的时间也会变得越来越长,从而降低了工作效率。在这…

如何用ChatGPT协助搭建品牌视觉体系(VI)?

该场景对应的关键词库(18个): VI体系、品牌、目标市场、品牌DNA、人群特征、设计理念、标志设计、配色方案、字体选择、图形元素、价值观、形象、客户经理、需求、品牌定位、目标受众、主色调、辅助色 提问模板(2个)&…

进阶自定义类型——结构体,枚举,联合

本章重点: 1.结构体 1.1 结构体类型的声明 1.2 结构的自引用 1.3 结构体变量的定义和初始化 1.4 结构体内存对齐 1.5 结构体传参 1.6 结构体实现位段(位段的填充&可移植性) 2.枚举 2.1 枚举类型的定义 2.2 枚举的优点 2.3 枚举的使用 3.联合 3.1 联合类…