SpringBoot配置文件(学习笔记)

news2025/7/6 2:24:07

目录

一、配置文件概述

配置文件的作用

配置文件的格式

二、application.properties 配置文件 

基本语法

读取配置文件

三、application.yml 配置文件

基本语法

 读取yml中的配置

1、yml配置的简单读取

2、读取yml 配置中不同数据类型及 null​编辑

2、读取yml配置文件的补充

yml配置对象

yml配置集合

四、Properties VS yml 总结和补充

关于properites的乱码问题


一、配置文件概述

配置文件的作用

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

1、数据库的连接信息(包含用户名和密码的设置)
2、项目的启动端口
3、第三方系统的调用密钥等信息
4、用于发现和定位问题的普通日志 和 异常日志 等。
5、还可以配置 日志的级别(规定只显示达到某个级别的日志),以及日志的持久化存储

想象一下:
如果没有配置信息,那么 Spring Boot 项目就不能连接和操作数据库,甚至是不能保存可以用于排查问题的关键日志,所以配置文件的作用是非常重要的
 



配置文件还有一个优点:

配置文件可以设置 开发环境 和 配置环境,两个配置文件。
然后呢,在运行打包的时候,通过修改一个变量,就可以指定 当前项目 “走”哪一个配置文件。
所以,配置文件之间是可以并存的!
意思就是:
可以将两个,或两个以上的配置文件(开发的,测试的,运维的),项目上线的时候,我们只需要改一个参数,改一个名字。

然后,项目中所有的内容,全部都会走 另一个配置文件。非常方便!
到时候,会给你们演示一下。

另外,再补充一点。
配置文件的分类,里面的内容可以分为两个类:

  • 1、系统级别的
  • 2、自定义级别的

配置文件的格式

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

  • 1、.properties
  • 2、.yml

【文件的后缀代表着文件的格式;配置文件也是如此!!!】

至于为什么要有两种格式?

这两者之间的关系,就像前面讲Bean 作用域 和 生命周期中的 @PostConstruct 与 init- method 之间的关系一样。
两者的功能是一样的,但是!是来自于 两个不同时间段 的 产物。

最早出现的配合文件格式是 .properties。
然后,在后期的使用中发现: properties 存在着一些缺陷。
那么,自然就会产生一个想法:properties 该怎么去优化?
于是,.yml 格式的配置文件,就诞生了。
这就和 maven 和 gradle 之间的关系一样。
gradle 是 maven 的升级版。
我们的 .yml格式的配置文件,就是 .properties格式配置文件 的 升级版。

前面讲过:一个项目中,可以存在多个配置文件。
即:配置文件之间是可以共存的!

也就是说:我们可以直接在项目中传建其他的配置文件,格式可以不同

二、application.properties 配置文件 

基本语法

而且!
在填写完后面的 value 值 之后,也不能加上一个空格。
会出事!!!
比如:
设置端口号:

另外,我们还可以自定义键值对。【上面的是系统级别的配置】

 因为我们已经把项目的端口号改成了9090,所有你再启动项目的时候端口号就变了

 更多配置文件详见:官方文档

读取配置文件

到了 Spring Boot 时代,几乎所有的功能,都可以通过 注解来搞定。
读取配置文件也是一样的,
可以使⽤ @Value 注解来实现。
@Value 注解使⽤“${}”的格式读取.

 在配置文件中用户可自定义各自类型的数据


三、application.yml 配置文件

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

yml 是⼀个可读性⾼,易于理解,⽤来表达数据序列化的格式。它的语法和其他⾼级语⾔类似(与 json 格式类似,键值对之间使用冒号+空格,进行分隔),并且可以简单表达清单(数组)、散列表,对象,标量,布尔,int等数据形态,甚至连 null 都可以设置!!!

它使⽤空⽩符号缩进和⼤量依赖外观的特⾊,特别适合⽤来表达或编辑数据结构、各种配置⽂件等。

yml 最⼤的优势是可以跨语⾔,不⽌是 Java 中可以使⽤。
golang、python 都可以使⽤ yml 作为配置⽂件。

 

总结下来, yml 配置文件一共有三个优点:
1、写法简单
2、支持多种数据类型
3、支持跨语言

上述这三个优点,都是 properties 配置文件所不具备的。

基本语法

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

上面我们说了一个项目中,可以存在多个配置文件。

那么我们可以直接在项目中传建其他的配置文件,格式可以不同

当一个项目的某个配置,出现在两种格式的配置文件中时,那么配置项会以properties 为主(忽略 yml 中的配置)。

如下图所示:

但其实与上面的application.properties相比,.yml配置文件还是挺好用的。


 读取yml中的配置

1、yml配置的简单读取

这个和对properitices的读取是相同

2、读取yml 配置中不同数据类型及 null


2、读取yml配置文件的补充

先来看一个栗子🌰


yml配置对象

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

那么怎么读取我们yml中的配置文件呢?

可能你会说:还用

@Value("${mykey.key}")不行吗?

答案是不行,我们要用的专门的类做这一件事


yml配置集合

首先我们在yml配置文件里把集合配置上

那么接下来我们看看是怎么读取集合的

集合的读取和对象⼀样,也是使⽤ @ConfigurationProperties 来读取的,创建一个类并在该类中设置一个集合属性,具体实现如下:

 

 

四、Properties VS yml 总结和补充

1、properties 是以 key=value 的形式配置的键值类型的配置⽂件.
⽽ yml 使⽤的是类似 json 格式的树形配置⽅式进⾏配置的.
yml 层级之间使⽤换⾏缩进的⽅式配置,key 和 value 之间使⽤“: ”(英⽂)冒号加空格的⽅式设置,并且空格不可省略。

2、properties 为早期并且默认的配置⽂件格式,但其配置存在⼀定的冗余数据,使⽤ yml 可以很好的解决数据冗余的问题。

3、yml 通⽤性更好,⽀持更多语⾔,如 Java、Go、Python 等,如果是云服务器开发,可以使⽤⼀份配置⽂件作为 Java 和 Go 的共同配置⽂件。

4、yml 虽然可以和 properties 共存,但⼀个项⽬中建议使⽤统⼀的配置类型⽂件。

当一个项目的某个配置,出现在两种格式的配置文件中时,那么配置项会以properties 为主(忽略 yml 中的配置)。

关于properites的乱码问题

这是因为 application.properties 是属于早期的配置文件,而早期的 配置文件是不支持中文的。
而 yml 是天生就支持中文的(utf8)。
要想 application.properties 支持中文,需要进行配置。

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

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

相关文章

Python基础知识入门(三)

Python基础知识入门(一) Python基础知识入门(二) 一、元组类型 元组是用英文小括号 () 把所有元素包裹起来,元组里面的每一个数据叫作元素。每个元素之间都要用 英文逗号 ( , ) 隔开。例如:(1,2,3)。 注意…

Head First设计模式(阅读笔记)-04.工厂模式

披萨订购 假设要完成披萨订购的功能,披萨的种类很多,比如 GreekPizz、CheesePizz 等,披萨店会根据用户需要的披萨种类制作披萨,制作的流程包括prepare->bake->cut->box 简单实现 下面代码的实现十分简单清晰,…

从0到0.1学习 lambda表达式(Java版)

编码几年时间,有一个东西似乎一直也逃不过去,那就是lambda表达式。 无论是c#,Python还是Java,lambda的思想都是共通的。但以下的语法和实例为java。 现在就来说说这个看似很难的lambda表达式 什么是lambda表达式? l…

【owt-server】m88分支和m59-server

OWT 单独有个webrtc的仓库,里面有m88的分支Merged Upgrade sdk to m88 for webrtc node #1026 提交记录 主干merge Merge pull request #1026 from starwarfan/mst-88webrtc-m88 目录 构建修改

【信管2.2】项目管理知识体系与组织结构

项目管理知识体系与组织结构上一次课中,我们已经学过了项目以及项目管理的概念,这些内容帮我们认识到了项目到底是个什么东西,有什么特点,和运营有什么区别等等。今天我们就继续沿着项目这件事说下去,我们将一起探讨一…

【知识网络分析】共引网络(co-citation)

共引网络(co-citation) 1 读取本地文献构建共引网络数据集2 网络数据集精简3 社团群体划分4 节点中心度相关指标计算1 读取本地文献构建共引网络数据集 RC.networkCoCitation()方法中的参数与RC.networkCitation()方法中的参数功能一致。该案例中使用的数据集同样为2020-202…

SpringBoot框架保姆级笔记一看就会

文章目录 文章目录文章目录[toc]1️⃣ 简介一. 什么是 [IoC](https://so.csdn.net/so/search?qIoC&spm1001.2101.3001.7020) 容器?二. AOP面向切面编程三. SSM整合四. HttpServletRequest五. HttpServletResponse六. Cookie 与 Session七. Cookie八. Session九…

Java异常01:Error 和 Exception

什么是异常 # 实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的实际要求、你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,数据…

最全面的SpringMVC教程(一)——SpringMVC简介

前言 本文为SpringMVC相关教程,下边将对SpringMVC进行简单介绍,具体包含:对MVC架构的回顾,什么是SpringMVC,SpringMVC编程示例(包含配置版示例、注解版示例),初识SpringMVC&#xff…

NM DEV Mathematics for Java 【suanshu.net免费】

NM Dev是一个面向对象、高性能、经过广泛测试和专业记录的数学编程库,在S2上运行。自 2010 年开发以来,它是大量经过编码的数值算法,因此它们是可靠的面向对象、统一和可测试的。编程经验或数学知识很少的用户可以通过快速组合类轻松地为他或…

备战 2023 春招,P7 大咖手打 26 大后端面试专题神技,1500 题解析助力

年过后,不少人已经蓄势待发,信心满满地准备投递简历,到处面试,在不同的 Offer 之中择优而栖。 与此同时,也有人会悔恨自己这半年进步不大,每天噼里啪啦敲代码,但面对那些不能再熟悉的 Java 面试…

大数据毕设选题 - 生成对抗网络的照片上色动态算法设计与实现(深度学习 opencv python)

文章目录1 前言1 课题背景2 GAN(生成对抗网络)2.1 简介2.2 基本原理3 DeOldify 框架4 First Order Motion Model1 前言 🔥 Hi,大家好,这里是丹成学长的毕设系列文章! 🔥 对毕设有任何疑问都可以问学长哦! 这两年开始…

Linux项目后端部署及JDKTomcatMySQL安装

前言 上一篇文章简单的分享了在VMware上安装linux系统,本篇文章将要分享的内容是使用linux系统完成项目的部署 一、前置准备工作 在Windows系统中,我们要在开发环境下才能进行项目的开发。那么在linux系统中也是,在安装完linux系统后&#xf…

NoSuchMethodError的常见原因和通用解决方式

目录 环境信息 问题描述 错误分析 解决方法 常见原因 1.第三方包,作用域不对导致应用没导入该包 2.编译时和运行时使用的版本不一样 3.JDK版本不一样 4.多个同路径、同名的类 1.代码复制场景 2.代码移动场景 排查步骤 附录 Maven仲裁机制: …

为啥这么人选择iPhone

01.听音乐(10元/月) 歌曲很全 多个终端支持 果子自带的Music app 在那个设备都可以使用, 包括MacBook Pro,iPhone,iPad,iwatch等 02.周边配件方便购买 03.遇到问题好解决 04.使用稳定,不会有广告&#x…

MySQL海量数据优化(理论+实战) 吊打面试官

一、准备表数据 咱们建一张用户表,表中的字段有用户ID、用户名、地址、记录创建时间,如图所示 ​OK,接下来准备写一个存储过程插入一百万条数据 CREATE TABLE t_user (id int NOT NULL,user_name varchar(32) CHARACTER SET utf8 COLLATE ut…

[附源码]Python计算机毕业设计防疫物资捐赠系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,我…

Vue组件化编程开发

目录 一.模块 二.组件 &#xff08;快捷键< 回车 生成单组件模板&#xff09; 三.非单文件组件 四.单文件组件: 首先理解模块和组件的基本概念: 一.模块 1.理解:向外提供特定功能的js程序&#xff0c;一般就是一个js文件 2.为什么: js文件很多很复杂 3.作用:复用js, 简…

Mybatis-Plus+SpringBoot结合运用

目录 前言 一、创建Maven项目导入相关的依赖 二、在resources添加日志和连接数据库 1.日志文件(log4j.properties) 2.连接数据库&#xff08;application.properties&#xff09; 三、编写pojo &#xff08;注解编写get/set/tostring&#xff09; 四、UserMapper编写继承…

Fragment的生命周期

文章目录Fragment的生命周期Fragment的状态和回调运行状态暂停状态停止状态销毁状态回调方法附加的回调方法onAttach()onCreateView()onActivityCreated()onDestroyView()onDetach()Fragment完整的生命周期图Fragment的生命周期 和Activity一样,Fragment也有自己的生命周期,并…