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

【Spring】Spring配置文件

目录

​什么是配置文件?

配置文件的作用

SpringBoot配置文件

配置文件格式

配置文件的优先级

properties配置文件说明

properties基本语法

读取配置文件

properties缺点

yml配置文件说明

yml基本语法

使用yml连接数据库

yml配置不同数据类型及null

 注意事项

@PostConstruct

配置对象

配置集合

配置Map

yml配置文件的优缺点

优点

缺点

总结


什么是配置文件?

配置文件是一种存放应用程序或系统配置的文件,包含了程序运行时所需要的各种选项和配置信息,例如字体样式、默认语言等。它允许开发者和用户在不修改代码的情况下,调整应用程序的行为和性能。配置文件通常以文本形式存在,格式可以是XML、JSON、YAML(yml)、INI、Properties等。

配置文件的作用

配置文件主要是为了解决硬编码代码的问题,把可能会发生改变的信息,放在一个集中的地方,当我们启动某个程序时,应用程序从配置文件中读取数据,并加载运行。

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

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

SpringBoot配置文件

SpringBoot支持并定义了配置文件的格式,也是在另一个层面达到了规范其他框架集成到SpringBoot的目的。

很多项目或者框架的配置信息也放在配置文件中,如:

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

SpringBoot中,内置了Tomcat服务器,默认端口号是8080,但在用户电脑上8080端口号可能会被其他应用程序占用,此外,如果启动多个SpringBoot项目,那么端口号也需要不同,所以SpringBoot需要支持让用户自定义端口号。

配置文件格式

在SpringBoot中,有三种不同形式的配置文件

  • application.properties
  • application.yml
  • application.yaml

yml是yaml的缩写,实际开发中出现的频率最高。yaml和yml使用方式是一样的,都是键值对的形式,所以后面我们只讲yml。

当应⽤程序启动时,SpringBoot会⾃动从classpath路径找到并加载
application.properties 和 application.yaml 或者 application.yml ⽂件
,当然也可以使用 spring.config.name 指定文件路径和名称。

配置文件的优先级

  • 理论上,application.properties 和 application.yml 是可以同时存在同一个项目中的,当这两个配置文件都存在,两个配置都会加载。如果配置文件内容有冲突,以application.properties 为主,即 application.properties 的优先级更高。
  • 虽然在理论上两个配置文件可以共存,但在实际的业务中,我们都是采用一种统一的配置文件,这样可以更好的维护(降低故障率)

properties配置文件说明

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

properties基本语法

properties是以键值对的形式配置的,key和value之间用“=”来连接。

示例:

#配置项目端口号
server.port=9090
#配置数据库连接信息
spring.datasource.url=jdbc:mysql://localhost:3306/beantext?characterEncoding=utf-8&useSSL=false
#配置数据库用户名
spring.datasource.username=root
#配置数据库密码
spring.datasource.password=root
#配置数据库驱动
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

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

读取配置文件

在项目中,如果我们想要读取到配置文件中的内容,需要使用 @Value 注解并且在注解中使用“${}”的格式来读取

my.text=hello world
package com.example.demo.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/pro")
@RestController
public class PropertiesController {@Value("${my.text}")private String key;@RequestMapping("/text1")public String getValue() {return "获取到的value为:" + key;}
}

properties缺点

properties配置是以键值对的形式配置的,我们通过观察,可以看到里面有些代码比较冗余。

此外,properties配置格式对中文也是不友好,我们把value值换为中文,再来试一下:

my.text=你好 世界

 

为什么会这样,我们可以打断点看一下:

可以看到,key的值是四个问号。 但是idea默认的字符集是UTF-8,是支持中文的,为了防止这种情况发生,所以我们在properties配置文件中尽量不要出现中文

接下来,我们来讲一下yml配置文件。

yml配置文件说明

yml是yaml的缩写,全程是 Yet Another Markup Language 翻译过来就是“另一种标记语言”。

yml基本语法

yml是树形结构的配置文件,基本语法是:key: value(注意:冒号后面是有空格的,不能省略!!!

key后+(冒号+空格

我们可以看到,正确的写法的key是会有高亮提示的(橙色,当然应该可以设置成其他颜色),而对于错误的写法,key还是灰色

此外,只要冒号有空格隔开,就是正确的写法,至于空格的数量,是不限的,当然按照规范来写的话,最好就一个。

使用yml连接数据库

spring: datasource:url: jdbc:mysql://localhost:3306/beantext?characterEncoding=utf-8&useSSL=falseusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driver

可以看到,相对properties配置文件的写法,yml配置文件的写法不仅能够体现出层级关系还能节省不必要的代码

此外,yml还有其他操作。

yml配置不同数据类型及null

# 字符串
string.value: hello# 布尔类型
boolean.value: true
boolean.value1: false# 整数类型
int.value: 10# 浮点数
float.value: 3.14159# Null  ~ 代表null
null.value: ~# "" 空字符串
# '' 单引号也表示空字符串
# 冒号后面什么都不加也可以表示空字符串。但这种方式不直观,更多的表示是使用引号括起来
empty:value1: ''value2: ""value3:

那么yml配置文件的属性应该如何获取?

其实跟properties配置文件获取属性的操作一样,都是要使用 @Value 注解来进行获取的。

package com.example.demo.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/pro")
@RestController
public class PropertiesController {@Value("${string.value}")private String value;@Value("${boolean.value}")private Boolean value1;@Value("${boolean.value1}")private Boolean value2;@Value("${int.value}")private Integer value3;@Value("${float.value}")private Float value4;@Value("${null.value}")private String value5;@RequestMapping("/getValue")public String getValue() {return "获取到的value为:" + value+" | "+value1+" | "+value2+" | "+value3+" | "+value4+" | "+value5;}
}

 注意事项

字符串默认不用加上单引号或者双引号,如果加英文的双引号可以表示特殊的含义,而如果加英文的单引号则不会表示特殊的含义

我们来看个例子来理解这段话的意思:

string:value1: Hello \n SpringBootvalue2: 'Hello \n SpringBoot'value3: "Hello \n SpringBoot"
package com.example.demo.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/pro")
@RestController
public class PropertiesController {@Value("${string.value1}")private String value1;@Value("${string.value2}")private String value2;@Value("${string.value3}")private String value3;@RequestMapping("/getValue")public String getValue() {System.out.println(value1);System.out.println(value2);System.out.println(value3);return "OK";}
}

可以看到,不加引号的和加单引号的不会让“\n”进行换行,而加双引号的依旧会让"\n"进行换行操作。

我们可以得出结论:

  • 字符串默认不用加上单引号或双引号;
  • 单引号会转义特殊字符,使其失去特殊功能,始终是一个普通的字符串;
  • 双引号不会转义字符串里面的特殊字符,特殊字符会表示本身的含义

可能会有点绕,\n本义是换行

使用单引号会转义,就是说不再换行了,\n只是一个普通的字符串;

使用双引号不会转义,就是说\n依旧是它本身的含义,即换行。

这里我们来了解一个新的注解:@PostConstruct

@PostConstruct

@PostConstruct可以标注在方法上,被标注的方法会在Spring容器完成Bean的实例化和依赖注入之后自动执行。所以我们这里可以偷个懒,后面的讲解我们就使用这个注解来帮我们完成测试。

需要注意:

  • 用该注解修饰的方法必须是非静态方法;
  • 不能有参数;
  • 返回类型通常是void

配置对象

yml配置文件不仅能配置一些基本的数据类型,还能配置对象。

写法如下:

#配置对象
student:name: '张三'age: 18

也可以写成行的形式:

#行的形式
student1: {name: '张三', age: 18}

那么这个时候我们就不能使用 @Value 注解来获取配置中的对象了,需要使用另外一个注解@ConfigurationProperties 来读取,如下:

package com.example.demo.model;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Data
@Component
@ConfigurationProperties(prefix = "student")//prefix表示前缀
public class Student {private String name;private int age;
}
@Controller
public class PropertiesController {@Autowiredprivate Student student;@PostConstructpublic void getStudent() {System.out.println(student);}
}

配置集合

ymp还可以配置集合。

配置格式:

-后一定要加空格,否则-和后面的内容就成了整体,统一赋值给对应的属性

type:list:- 'zhangsan'- 'lisi'- 'wangwu'

 

package com.example.demo.model;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.List;@Data
@Component
@ConfigurationProperties("type")
public class ListConfig {private List<String> list;}
@Controller
public class PropertiesController {@Autowiredprivate ListConfig listConfig;@PostConstructpublic void getList() {System.out.println(listConfig.toString());}
}

 

配置Map

 

package com.example.demo.model;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.Map;@Data
@Component
@ConfigurationProperties("maptypes")
public class MapConfig {private Map<String, String> map;
}
package com.example.demo.controller;import com.example.demo.model.ListConfig;
import com.example.demo.model.MapConfig;
import com.example.demo.model.Student;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@Controller
public class PropertiesController {@Autowiredprivate MapConfig mapConfig;@PostConstructpublic void getMap() {System.out.println(mapConfig);}
}

yml配置文件的优缺点

优点
  • 可读性⾼,写法简单, 易于理解
  • 采用缩进和嵌套来表示层次结构,适合非常复杂配置的管理
  • ⽀持更多的数据类型, 可以简单表达对象, 数组, List,Map等数据形态.
  • ⽀持更多的编程语⾔, 不⽌是Java中可以使⽤, 在Golang, Python, Ruby, JavaScript中也可以使⽤
缺点
  • 不适合写复杂的配置⽂件
  • 对格式有较强的要求(⼀个空格可能会引起⼀场⾎案),对缩进敏感

总结

什么是配置文件?

配置文件是用来存放应用程序或者系统的配置的文件,可以在不动源码的情况下对应用程序的性能和行为进行调整,使用配置文件,可以使程序完成用户和应用程序的交互,或者应用程序与其他应用程序的交互

SpringBoot的配置文件

Spring有三种配置文件:

  • application.properties
  • application.yml
  • application.yaml

application.properties 和 application.yml 是可以同时存在同一个项目中的,以application.properties为主,.properties的优先级更高

配置文件的格式

  •  application.properties:键值对形式,key和value用“=”隔开​​​​​​​
  • application.yml:也是键值对,key和value用“冒号+空格”隔开。

读取配置文件的方式

对于基本的数据类型,我们采用 @Value 注解即可,但对于对象、集合、map这些,我们需要使用 @ConfigurationProperties

@PostConstruct可以标注在方法上,被标注的方法会在Spring容器完成Bean的实例化和依赖注入之后自动执行。要求是:方法不能是静态方法,不能有参数,返回值尽量为void。


 

以上就是本篇所有内容~

若有不足,欢迎指正~ 

相关文章:

【Spring】Spring配置文件

目录 ​什么是配置文件&#xff1f; 配置文件的作用 SpringBoot配置文件 配置文件格式 配置文件的优先级 properties配置文件说明 properties基本语法 读取配置文件 properties缺点 yml配置文件说明 yml基本语法 使用yml连接数据库 yml配置不同数据类型及null 注意…...

MSI微星电脑冲锋坦克Pro Vector GP76 12UGS(MS-17K4)原厂Win11系统恢复镜像,含还原功能,预装OEM系统下载

适用机型&#xff1a;【MS-17K4】 链接&#xff1a;https://pan.baidu.com/s/1P8ZgXc6S_J9DI8RToRd0dQ?pwdqrf1 提取码&#xff1a;qrf1 微星笔记本原装出厂WINDOWS11系统自带所有驱动、出厂主题壁纸、系统属性专属联机支持标志、Office办公软件、MSI Center控制中心等预装…...

Unity合批处理优化内存序列帧播放动画

Unity合批处理序列帧优化内存 介绍图片导入到Unity中的处理Unity中图片设置处理Unity中图片裁剪 创建序列帧动画总结 介绍 这里是针对Unity序列帧动画的优化内容&#xff0c;将多个图片合批处理然后为了降低Unity的内存占用&#xff0c;但是相对的质量也会稍微降低。可自行进行…...

【Java】逻辑运算符详解:、|| 与、 | 的区别及应用

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: Java 文章目录 &#x1f4af;前言&#x1f4af;一、基本概念与运算符介绍&#x1f4af;二、短路与与非短路与&#xff1a;&& 与 & 的区别1. &&&#xff1a;短路与&#xff08;AND&#xff09;2. …...

深入解析 Flutter GetX

深入解析 Flutter GetX&#xff1a;从原理到实战 GetX 是 Flutter 中一个轻量级且功能强大的状态管理、路由管理和依赖注入框架。它以简单、快速、高效著称&#xff0c;适合从小型到大型项目的开发需求。GetX 的设计理念是一体化解决方案&#xff0c;通过一个框架解决状态管理…...

Java 大视界 -- 人才需求与培养:Java 大数据领域的职业发展路径(92)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

顺序表常用操作和笔试题

1、顺序表的常用操作 1.1 顺序表的创建 如下代码所示&#xff1a;创建了一个默认空间为10的整型顺序表&#xff0c;如果空间不足则会以1.5倍扩容。 List<Integer> list new ArrayList<>(); 创建一个空间为15的整型顺序表 List<Integer> list2 new ArrayL…...

List<Map<String, Object>> 如何对某个字段求和

在Java中&#xff0c;如果你有一个List<Map<String, Object>>的结构&#xff0c;并且你想要对某个特定字段进行求和&#xff0c;你可以使用Java 8的Stream API来简化这个过程。下面是一个示例代码&#xff0c;演示如何对某个字段进行求和。 假设你有一个List<M…...

2024亚马逊数据分析!

整体财务数据23 净销售额&#xff1a;全年净销售额达 6380 亿美元&#xff0c;同比增长 11%。 净利润&#xff1a;全年净利润为 592 亿美元&#xff0c;较上年同期的 304 亿美元增长 95%。 经营活动现金流&#xff1a;经营活动现金流达 1159 亿美元&#xff0c;同比增加了 36…...

foobar2000设置DSP使用教程及软件推荐

foobar2000安卓中文版&#xff1a;一款高品质手机音频播放器 foobar2000安卓中文版是一款备受好评的高品质手机音频播放器。 几乎支持所有的音频格式&#xff0c;包括 MP3、MP4、AAC、CD 音频等。不论是经典老歌还是最新的流行音乐&#xff0c;foobar2000都能完美播放。除此之…...

Apache Logic4j 库反序列化漏洞复现与深度剖析

前言 在渗透测试领域&#xff0c;反序列化漏洞一直是安全研究人员和攻击者关注的焦点。今天&#xff0c;我们将深入探讨 Apache Logic4j 库中的反序列化漏洞&#xff0c;详细了解其原理&#xff0c;并进行完整的复现演示。 一、漏洞原理 Apache Logic4j 库在处理对象的反序列…...

FPGA VIVADO:axi-lite 从机和主机

FPGA VIVADO:axi-lite 从机和主机 TOC在这里插入代码片 前言 协议就不详细讲解了&#xff0c;直接看手册即可。下面主要如何写代码和关键的时序。 此外下面的代码可以直接用于实际工程 一、AXI-LITE 主机 数据转axi lite接口&#xff1a; 读/写数据FIFO缓存 仲裁&#xff1a…...

LabVIEW 中的 3dgraph.llb库

3dgraph.llb 库位于C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform目录下&#xff0c;是 LabVIEW 系统里用于 3D 图形相关操作的关键库。它为 LabVIEW 用户提供众多功能&#xff0c;可在应用程序内创建、显示和交互各类 3D 图形&#xff0c;极大增…...

【Linux】文件系统:文件fd

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;linux笔记仓 目录 01.回顾C文件接口02.系统文件I/O02.1 openflags 参数&#xff08;文件打开模式&#xff09;标记位传参1. 访问模式&#xff08;必须指定一个&#xff09;2. 额外控制标志&#xf…...

Vue学习记录19

TransitonGroup <TransitionGroup> 是一个内置组件&#xff0c;用于对 v-for 列表中的元素或组件的插入、移除和顺序改变添加动画效果。 和 <Transtion> 的区别 <TranstionGroup> 支持和 <Transtion> 基本相同的 props、CSS过渡 class 和 JavaScript…...

MATLAB更改图论的布局:设置layout

在图论那一章&#xff0c;我们讲过最小生成树和单源最短路径&#xff08;见&#xff1a;从零开始学数学建模&#xff09;&#xff1a; 以最短路径那节课为例&#xff0c;把绘图pplot那部分代码写为&#xff1a; % plot绘图有很多参数可以设置&#xff0c;使图尽量美观 P plot…...

【分果果——DP(困难)】

题目 分析 分果果题解参考&#xff0c;下面是补充https://blog.csdn.net/AC__dream/article/details/129431299 关于状态 设f[i][j][k]表示第i个人取到的最后一个糖果编号是j&#xff0c;第i-1个人取到的最后一个糖果编号小于等于k时的最大重量的最小值 关于转移方程 关于 j …...

禁止WPS强制打开PDF文件

原文网址&#xff1a;禁止WPS强制打开PDF文件_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何避免WPS强制打开PDF文件。 方法 1.删除注册表里.pdf的WPS绑定 WinR&#xff0c;输入&#xff1a;regedit&#xff0c;回车。找到&#xff1a;HKEY_CLASSES_ROOT\.pdf删除KWPS.PDF…...

罗技鼠标接收器丢了,怎么用另一个logi接收器重新配对?

1.首先接收器得是logi的&#xff0c;其次看这个接收器是什么类型的&#xff0c;一共有以下3种。&#xff08;这几种接收器都可以给其他logi鼠标用&#xff09; 下图左侧带红标的这个&#xff08;标可能带颜色或者是透明&#xff0c;都一样&#xff09;&#xff0c;叫多设备接收…...

ffmpeg configure 研究2:分析屏幕输出及文件输出的具体过程

author: hjjdebug date: 2025年 02月 17日 星期一 16:57:55 CST description: ffmpeg configure 研究2 分析屏幕输出及文件输出的具体过程 文章目录 0. 执行./configure 命令1. sed: cant read 信息是从哪里来的 ?1.1 find_filters_extern()1.2 find_things_extern() 2. 屏幕输…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...