SpringBoot配置文件

一、配置文件的核心作用

  1. 解决硬编码问题
    • 硬编码是将数据直接写死在代码中,缺乏灵活性;配置文件将易变信息集中存储,程序启动时读取并加载。
    • 举例:手机字体大小,硬编码会导致所有用户字体一致,配置文件可让用户自定义显示。
  2. 支持交互与适配实现用户与程序、程序与程序之间的灵活交互,适配不同场景的个性化需求。

二、SpringBoot 配置文件的典型应用场景

SpringBoot 通过统一配置文件规范框架集成,常见配置内容包括:

  1. 项目启动端口:解决默认 8080 端口被占用的问题,支持用户自定义端口。
  2. 数据库连接信息:适配不同数据库,让持久层框架(对 JDBC 的封装)通过配置实现数据库访问。
  3. 其他配置项:第三方系统密钥、日志设置等。

三、配置⽂件快速⼊⼿

3.1操作背景

SpringBoot 内置 Tomcat 默认端口为 8080,若该端口被占用,可通过配置文件修改端口。

3.2操作步骤
  1. 找到配置文件 在 SpringBoot 项目的resources目录下,找到默认生成的application.properties文件。
  1. 修改端口配置 在文件中添加(或修改)配置项:server.port=9090
  2. 验证结果
    • 重新运行程序后,日志会显示Tomcat started on port(s): 9090,说明端口生效。
    • 访问程序需使用新端口(如http://127.0.0.1:9090/login.html),原 8080 端口不再可用。

四、配置⽂件的格式

4.1配置文件的三种格式:
  1. application.properties
  2. application.yml 是 yaml 的简写(类似 htm 是 html 的简写),目前主流格式
  3. application.yaml
4.2多格式配置文件的优先级规则

若同时存在 Properties 和 yml 配置文件:

  • 非冲突项:两者配置会合并生效
  • 冲突 项:以 Properties 的配置为准(Properties 优先级更高

虽然理论上来讲.properties 可以和.yml 共存,但实际的业务 当中,我们通常会采取**⼀种统⼀** 的配置⽂件格式,这样可以更好的维护(降低故障率).

4.3不同格式的语法规则
  1. Properties 语法

    • =分隔 key 和 value
    • key 规范:全小写,单词间用.分隔
    • 示例:spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb
  2. yml 语法

    • 采用层级缩进结构(缩进的空格不可省略
    • 示例:

五、properties配置⽂件说明

properties配置⽂件是最早期的配置⽂件格式,也是创建SpringBoot项⽬默认的配置⽂件

5.1properties基本语法

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

PS:配置⽂件中使⽤"#"来添加注释信息。

更多SpringBoot配置文件请看官网

5.2读取配置⽂件

在项⽬中,想要主动的读取配置⽂件中的内容通过@Value注解读取配置,语法为@Value("${key}"),示例:

5.3properties缺点分析

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

配置存在冗余信息 ,例如数据库相关配置需**重复写spring.datasource**前缀,易造成配置冗余、可读性下降。

可以使⽤yml配置⽂件的格式化了

六、yml配置⽂件说明

yml是YAML是缩写,它的全称YetAnotherMarkupLanguage翻译成中⽂就是"另⼀种标记语⾔.

6.1yml基本语法

YAML 是树形结构的配置文件,核心语法是key: value冒号后必须加空格(否则配置无效):

  • 正确示例:key1: java(key 会高亮,配置生效)
  • 错误示例:key2:java2(key 无高亮,配置不生效)
YAML 的实际应用(以数据库连接为例)

yml和properties连接数据库的配置对⽐

6.2yml使⽤进阶
6.2.1yml配置不同数据类型及null
6.2.2yml配置读取

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

6.2.3注意事项:value值加单双引号

字符串默认不⽤加 上单引号或者双引号,如果加英⽂的单双引号 可以表⽰特殊的含义

尝试在application.yml中配置如下信息:

以上程序的执⾏结果如下图所⽰:

结论:

  • 无引号 / 单引号 :特殊字符会被转义(失去原功能)例:str1: Hello \n Spring Boot.str2: 'Hello \n Spring Boot.'输出:Hello \n Spring Boot.\n被当作普通字符串)
  • 双引号 :特殊字符会保留原含义例:str3: "Hello \n Spring Boot."输出:(\n解析为换行)
6.3配置对象

支持两种写法(效果一致):

不能⽤@Value来读取配置中的对象了,此时要使⽤注解**@ConfigurationProperties**来读取

6.4配置集合

配置⽂件也可以配置list集合,如下所⽰:

集合的读取和对象⼀样,也是使⽤@ConfigurationProperties 来读取的,具体实现如下:

访问集合的实现如下:

6.5配置Map

配置⽂件也可以配置map,如下所⽰:

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

Map的读取和对象⼀样,也是使⽤@ConfigurationProperties 来读取的,具体实现如下:

打印类的实现如下:

6.6yml优缺点
优点:
  1. 可读性高:写法简洁,层级结构清晰,易于理解。
  2. 支持多数据类型:可直接表达对象、数组、List、Map 等复杂结构。
  3. 跨语言兼容:不仅适用于 Java,还支持 Golang、Python、Ruby 等多种编程语言。
缺点:
  • 不适合复杂配置:配置逻辑复杂时,YAML 的层级嵌套会降低可读性,且转换(如从 Properties 转 YAML)成本高。

⽐如properties格式如下:

转换为yml:

  • 格式要求严格:缩进、空格等格式错误(如少一个空格)会导致配置失效,排查成本高。

七、验证码案例

7.1验证码的应用背景

随着安全需求提升,验证码已成为项目的常见安全措施,形式从传统字符验证码,扩展到图形验证码、行为验证码等更复杂的类型。

7.2验证码的实现方式

验证码可通过前端或后端实现 ,也可借助第三方插件 / 工具包快速开 发,此处选择Hutool 工具包来实现(Hutool 是 Java 生态中的工具集,提供了简洁的验证码生成 API)。

7.3Hutool 验证码的核心特点

Hutool 的验证码工具支持生成多种类型的验证码(字符、数字、图形干扰等),优点是集成简单、配置灵活,能快速实现验证码的生成、渲染与校验逻辑。

7.4需求与接口定义
1. 生成验证码接口
  • 请求 URL/captcha/getCaptcha
  • 交互逻辑:前端发起请求,后端生成验证码图片并直接返回,前端将图片渲染到页面展示。
  • 作用:向用户提供待输入的验证码(通常包含字符 / 图形干扰,防止机器识别)。
2. 校验验证码接口
  • 请求 URL/captcha/check
  • 请求参数captcha(用户输入的验证码内容)
  • 响应结果true(验证成功)/ false(验证失败)
  • 交互逻辑:用户输入验证码后,前端将输入内容传给后端,后端对比 "生成时存储的验证码" 与 "用户输入内容",返回校验结果。

7.5Hutool⼯具介绍

一、Hutool 的定位

Hutool 是一个Java 工具包类库,通过封装 JDK 原生 API(如文件、加密、转码、正则等),形成各类静态工具类,是 "小而全" 的 Java 工具集。

二、Hutool 的核心特点
  1. 降低学习成本:以静态方法封装 API,无需深入理解底层实现即可快速使用;
  2. 提升开发效率:简化重复代码编写,让 Java 开发更简洁,兼具函数式语言的优雅性。
三、Hutool 的典型功能模块

包含多种实用工具类,例如:

  • 日期工具:简化日期的解析、处理与转换;
  • HTTP 客户端:封装 HTTP 请求操作;
  • 转换工具:提供统一的类型转换方案;
  • 配置文件工具:简化 Properties 等配置文件的读取;
  • JDBC 工具:简化数据库操作(如 MySQL、Oracle 连接)。

Hutool官⽹:

Hutool参考⽂档:

Hutool源码:

7.6实现服务器端代码

1.引入依赖

2.实现验证码

根据API⽣成验证码,并进⾏测试

相关推荐
qq_2518364576 分钟前
基于java Web 动漫视频网站毕业论文
java·开发语言·前端
LayZhangStrive11 分钟前
JUC相关的函数、注解、变量杂记
java·面试·多线程·juc
未秃头的程序猿16 分钟前
给公司做了个AI客服Agent,用的Spring AI 1.0,3天上线领导拍板了
java·后端·ai编程
曹牧20 分钟前
Eclipse 批量文本替换
java·ide·eclipse
Darren24526 分钟前
MySQL索引执行计划不走索引下推
后端
程序员清风30 分钟前
OpenAI官方发布最新提示词技巧!
java·后端·面试
梅头脑36 分钟前
写了3年CRUD,volatile和synchronized的区别还是答不清——直到我画出了这张三性两锁边界图
java
暮暮祈安38 分钟前
Celery 新手入门指南
java·数据库·python·flask·httpx
码事漫谈1 小时前
人机协同的三重范式:HITL、HOTL与HOOTL
后端
武子康1 小时前
Inkling 975B 说明“开放权重“与“普通开发者本地运行“已经分离,内容重点应是部署容量和运行时边界
前端·人工智能·后端