一、Spring配置文件

1.1、什么是Spring配置

        Spring配置指的是在Spring框架中定义和管理应用程序组件(如Bean)及其依赖关系的过程

作用

        配置文件主要用于解决硬编码问题,它将可能变更的信息集中存放。程序启动时,会从配置文件中读取数据并加载运行

1.2、Spring Boot 配置信息

        SpringBoot不仅支持多种配置文件格式,还通过标准化配置规范来促进其他框架与SpringBoot的集成,常见的配置信息包括:

  • 项目启动端口
  • 数据库连接信息(含用户名和密码)
  • 第三方系统调用密钥
  • 用于问题排查的常规日志和异常日志

项目启动端口配置

        SpringBoot 内置Tomcat 服务器,默认使用8080端口。考虑到该端口可能被其他应用占用,SpringBoot 支持用户自定义端口配置


数据库连接配置

        为简化数据库访问,各种持久层框架对JDBC进行了深度封装,使用户仅需少量代码即可完成数据库操作。由于不同应用需要连接不同数据库,这些框架都支持用户自定义数据库连接配置

1.3、Spring Boot支持的配置文件

Spring Boot支持的配置文件有以下几种:

        (1)Properties文件:使用 properties 作为文件后缀,采用键值对的方式进行配置。示例:application.properties

        (2)YAML文件:使用.yml 或 yaml 作为文件后缀,采用缩进和冒号来表示结构,支持列表和嵌套结构,具有更易读的特点。示例:application.yml

        (3) XML文件:使用.xml作为文件后缀,采用XML标签的形式进行配置。可以与Spring Framework的传统配置方式兼容。示例:application.xml

        (4) JSON文件:使用 json 作为文件后缀,采用JSON格式进行配置。示例:application.json

        Spring Boot默认使用 src/main/resources 目录下的 application.propertiesapplication.yml 作为配置文件。开发者可根据项目需求选择其中一种格式,按照对应语法规则进行配置即可

         此配置文件类型为YAML文件,前篇我们讲过:

         修改 application.yml 文件:

        再次运行程序,我们可以看到Tomcat启动端口号为:9090

1.4、配置文件冲突

         当一个项目中既存在 Properties文件,又存在 YAML文件时,并且配置信息有冲突如下:

         答案是

        我们再看运行结果: Tomcat 启动端口号为:8776,即为 properties文件中配置的端口号,但是我们在项目配置信息时,尽量只生成一个配置文件,避免因冲突造成的故障

二、Properties配置文件

        properties 是早期常用的配置文件格式,也是 SpringBoot 项目默认的配置文件类型

 2.1、Properties基本语法

        properties采用键值对形式配置,键(key)和值(value)之间通过等号 "=" 连接,使用 ‘#’ 来添加注释,例如:

        详细语法讲解请看官方文档:       Spring boot配置

2.2、读取配置文件

        在配置文件中添加如下内容:

@RestController
@RequestMapping("Demo")
public class PropertiesDemo {@Value("${phone.num}")private int num;@RequestMapping("a")public String a(){System.out.println(num);return "读取到电话号码: "+num;}
}

        访问URL路径 127.0.0.1:9090/Demo/a 后:

2.3、Properties缺点分析

2.3.1、扩展性有限

        Properties文件采用简单的键值对结构,仅支持单层数据,无法直接表达复杂嵌套结构(如JSON/XML支持的树形数据)。当配置项存在层级关系时,需依赖命名约定(如phone.people1.num),可读性和维护性较差

2.3.2、类型支持不足

        所有值均以字符串形式存储,需手动转换数据类型。例如数字、布尔值等需额外代码处理,易引发类型转换错误或遗漏

2.3.3、信息冗余

        properties 配置是以key-value的形式配置的,会有很多的冗余的信息,如下:

三、YAML配置文件

        yaml 通常简写为 yml,这是实际开发中最常见的写法。yml 和 yaml 的使用方式完全一致。

3.1、yml基本语法

        YML 采用树形结构的配置文件格式,其基本语法规则为 "key: value" ;其中 key 和 value 之间必须使用英文冒号加空格分隔,该空格不可省略。基本语法示例如下:

 3.2、yml配置不同数据类型

3.2.1、正常接收参数

        上述代码中,空字符串可以空着不写,但是为了避免造成误会,我们可以加上引号表示空字符串,此处单引号或者双引号都一样 

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

         访问URL后:

 3.2.2、不同类型接收参数
@RestController
@RequestMapping("Demo")
public class PropertiesDemo {@Value("${float.value}")private int value;@PostConstructpublic void getList(){System.out.println("尝试整形接收浮点型变量:"+value);}
}

        在使用 int 类型接收 yml 配置文件中 float.value 的值时,会出现类型匹配异常。因此,在接收参数时需要注意将参数转换为兼容的数据类型

 3.3、配置对象

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

        此时无法通过@Value 注解读取配置对象,需要使用 @ConfigurationProperties 注解来实现,具体代码如下:

@ConfigurationProperties(prefix = "hero")
@Component
@Data
public class Hero {private String name;private int age;private String hobby;
}
@RestController
@RequestMapping("Demo")
public class PropertiesDemo {@Autowiredprivate Hero hero;@RequestMapping("hero")public String getHero(){return hero.toString();}
}

        运行程序并访问URL:127.0.0.1:8080/Demo/hero 后得:

        @ConfigurationProperties 注解会将配置文件中以"hero"为前缀的配置项自动映射到 Hero 类的对应属性上。随后,Spring 会将这些值注入到 PropertiesDemo 类的 Hero 对象中,从而得到上述最终的配置结果,当然上述配置文件中的对象也可看作为一个一个的参数按照 3.2.1 目录的方法步骤进行获取

3.4、配置集合

         yml 配置文件也可以配置 list 集合,代码如下:

list:name:- aaa- bbb- ccc- ddd- eee

        集合的读取方式与对象相同,都是通过 @ConfigurationProperties注解来实现的

@RestController
@RequestMapping("Demo")
public class PropertiesDemo {@Autowiredprivate ListConfig listConfig;@PostConstructpublic void getList(){System.out.println(listConfig.toString());}
}

        观察结果:

        此处我们可以观察到,在输出 list 集合后, 此程序还未启动完成,为什么呢?

 3.5、配置Map

  yml 配置文件还可以配置 Map,代码如下:

maptypes:map:k1: v1k2: v2k3: v3

        Map的读取方式与上述对象和集合也相同,也是通过 @ConfigurationProperties 注解来实现的

@Data
@ConfigurationProperties("maptypes")
@Component
public class MapConfig {private HashMap<String,String> map;
}
------------------------------------------
@RestController
@RequestMapping("Demo")
public class PropertiesDemo {@Autowiredprivate MapConfig mapConfig;@PostConstructpublic void getList(){System.out.println(mapConfig.toString());}
}

         观察结果:

3.6、yml的优缺点 

3.6.1、优点

        (1)语法简洁明了,可读性强,写法简单,易于理解

        (2)数据类型支持丰富,能直观地表达对象、数组、集合等多种数据结构

        (3)跨语言兼容性好,不仅适用于Java,还支持Golang、Python、Ruby、JavaScript等多种编程语言

3.6.2、缺点

        (1)不适合编写复杂配置文件

        (2)格式要求严格,细小的空格或缩进错误都可能导致解析失败

四、本章总结

        properties 文件采用 key=value 的键值对格式配置,而 yml 文件则采用树形结构配置方式

        读取配置文件时,可使用 @Value 注解,注解内需以 "${}" 的格式指定配置项

        yml 文件通过换行缩进来表示层级关系,key 和 value 之间需用英文冒号加空格分隔,且空格不可省略

        properties 是早期默认的配置文件格式,存在一定数据冗余问题,yml 能有效解决冗余问题,但不太适合复杂配置场景

        yml 和 properties 可以共存于同一项目,但建议统一使用其中一种配置文件类型

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

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

相关文章

无人机喷洒系统技术要点与难点解析

一、 模块运行方式1. 任务规划与加载模块&#xff1a;输入&#xff1a;农田边界、障碍物信息、作物类型、病虫害信息、所需喷洒量、天气条件。运行&#xff1a;利用地面站软件或移动APP&#xff0c;规划最优飞行路径&#xff0c;设定飞行高度、速度、喷洒参数、作业区域。将规…

mongodb源代码分析createCollection命令创建Collection流程分析

MongoDB 提供两种方式创建集合&#xff1a;隐式创建 和 显式创建。方式 1&#xff1a;隐式创建&#xff08;推荐&#xff09;当你向不存在的集合中插入文档时&#xff0c;MongoDB 会自动创建该集合。示例在 db中隐式创建 users 集合&#xff1a;javascriptdb.users.insertOne({…

c++注意点(13)----设计模式(抽象工厂)

创建型模式抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供一个接口&#xff0c;用于创建一系列相关或相互依赖的对象&#xff0c;而无需指定它们具体的类。简单说&#xff0c;它就像一个 "超级工厂"&#xff…

【大语言模型入门】—— Transformer 如何工作:Transformer 架构的详细探索

Transformer 如何工作&#xff1a;Transformer 架构的详细探索Transformer 如何工作&#xff1a;Transformer 架构的详细探索什么是 Transformer&#xff1f;什么是 Transformer 模型&#xff1f;历史背景从 RNN 模型&#xff08;如 LSTM&#xff09;到 Transformer 模型在 NLP…

iOS安全和逆向系列教程 第20篇:Objective-C运行时机制深度解析与Hook技术

iOS安全和逆向系列教程 第20篇:Objective-C运行时机制深度解析与Hook技术 引言 在上一篇文章中,我们深入学习了ARM64汇编语言的基础知识,掌握了从寄存器操作到指令分析的完整技能体系。现在,我们将把这些底层知识与iOS应用的高层逻辑联系起来,深入探讨Objective-C运行时…

IDEA中全局搜索快捷键Ctrl+Shift+F为何失灵?探寻原因与修复指南

在软件开发中&#xff0c;高效地查找和管理代码是提升生产力的关键。IntelliJ IDEA&#xff0c;作为一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;提供了丰富的搜索功能&#xff0c;帮助开发者迅速定位代码、资源、甚至是IDE功能本身。 在 IntelliJ IDE…

【学习笔记】Lean4 定理证明 ing

文章目录概述Lean4 定理证明初探示例&#xff1a;证明 1 1 2示例&#xff1a;证明 2 * (x y) 2 * x 2 * yLean4 定理证明基础命题与定理命题&#xff08;Proposition&#xff09;定理&#xff08;Theorem&#xff09;量词策略概述 Lean证明是指在Lean环境中&#xff0c;通…

墨者:SQL注入漏洞测试(HTTP头注入)

墨者学院&#xff1a;SQL注入漏洞测试(HTTP头注入)&#x1f680; 1. 什么是HTTP头注入&#xff1f;&#x1f50d; HTTP头注入是指攻击者通过篡改HTTP请求头部的字段&#xff08;如User-Agent、Referer、Cookie、Host等&#xff09;&#xff0c;将恶意SQL代码插入到后端数据库查…

linux_前台,后台进程

*在用户访问端口时&#xff0c;操作系统会形成对应的session,在其的内部进一步形成bash等进程 *一个会话只有一个前台进程&#xff0c;可以有多个后台进程&#xff0c;前台与后台进程的区别在于谁拥有键盘的使用权*前台与后台进程都可以访问显示器但是后台无法访问标准输入获取…

spring data mongodb 入门使用手册

<!--pom.xml引入依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>文档映射类Student.java import lombok.Data; import lombok.NoArgsCons…

Fastjson2常用操作大全:对象、字符串、集合、数组、Map与JSON互转实战

高性能&#xff1a; 核心解析器和生成器经过深度优化&#xff0c;性能远超许多同类库。 功能丰富&#xff1a; 支持标准JSON、JSONPath查询、泛型处理、日期格式化、自定义序列化/反序列化等。 易用性&#xff1a; API 设计简洁直观&#xff0c;JSON 工具类提供了最常用的 toJS…

大模型——字节Coze重磅开源!Dify何去何从

大模型——字节Coze重磅开源!Dify何去何从 想必很多人盼了很久,就在昨晚,字节Coze终于开源了!Coze Studio 是字节跳动新一代 AI Agent 开发平台扣子(Coze)的开源版本。 提供 AI Agent 开发所需的全部核心技术:Prompt、RAG、Plugin、Workflow,使得开发者可以聚焦创造 A…

NaVid——基于单目RGB捕获的视频让VLM规划「连续环境中VLN」的下一步:无需地图/里程计/深度信息(含MP3D/R2R/RxR,及VLN-CE的详解)

前言 因为我司「七月在线」准备于25年7月底复现下NaVILA&#xff0c;而在研究NaVILA的过程中&#xff0c;注意到了这个NaVid 虽然NaVid目前已经不是VLN sota了&#xff0c;但其首次展示了VLM在无需地图、里程计或深度输入的情况下&#xff0c;能够实现优秀的导航性能且对后来…

【Vue2】结合chrome与element-ui的网页端条码打印

所有文章都是免费查看的&#xff0c;如果有无法查看的情况&#xff0c;烦请联系我修改哈~ 序言 为什么要做这个呢&#xff1f;因为所需要的条码打印功能比较简单&#xff0c;符合需要即可&#xff0c;但是呢网上查看了发现并没有合适的开源项&#xff0c;其他成熟的软件收费又超…

循环神经网络——动手学深度学习7

环境&#xff1a;PyCharm python3.8 &#x1f449;【循环神经网络】(recurrent neural network&#xff0c;RNN) RNN通过 引入状态变量存储过去的信息和当前的输入&#xff0c;从而可以确定当前的输出。状态变量捕捉序列的时序依赖&#xff0c;是处理文本、时间序列等数据的…

Java面试宝典:MySQL8新特性底层原理

一、降序索引的革新 1.1 降序索引的核心概念 MySQL 8.0 实现了真正的降序索引(Descending Index) 支持,这是数据库引擎层面的重大改进: 存储引擎支持:仅 InnoDB 存储引擎支持降序索引,且仅适用于 B+Tree 索引结构 语法显式声明:通过 DESC 关键字显式指定字段的排序方向…

前端-html+CSS基础到高级(三)html基础和开发工具

一、html语法规范什么是注释?在同学上课学习时&#xff0c;我们会在书本段落间记录内容的注解&#xff0c;方便下次看到此处理解。问题&#xff1a;我们在书本段落间记录下的注解是为了给谁看的&#xff1f; 下次的阅读课本者&#xff08;自己&#xff09;。程序员在写代码时也…

-Dspring.output.ansi.enabled=ALWAYS 设置彩色日志不生效

-Dspring.output.ansi.enabledALWAYS 设置彩色日志不生效 问题原因&#xff1a;使用的自定义的 logback-spring.xml日志需要改一下 <?xml version"1.0" encoding"UTF-8"?> <configuration><appender name"STDOUT" class"c…

C# 判断语句深度解析

C# 判断语句深度解析 引言 在编程领域,C# 是一种广泛使用的面向对象的编程语言,常用于构建各种应用程序,从桌面到移动应用,再到网站服务。C# 的核心特性之一是其强大的控制流机制,其中包括条件判断。本文将深入探讨 C# 中的判断语句,包括它们的类型、使用场景以及最佳实…

Ambari 3.0.0 全网首发支持 Ubuntu 22!

本月我们团队带来了一个重磅进展&#xff1a;Ambari 3.0.0 全网首发支持 Ubuntu 22&#xff01; 经过数月筹备和持续迭代&#xff0c;终于让 Ambari 以及大数据基础组件可以顺利运行在 Ubuntu 22 上。 需求来源&#xff1a;用户呼声决定研发方向 年初有位小伙伴私信我们&#x…