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⽣成验证码,并进⾏测试

相关推荐
cike_y6 小时前
JavaWeb之过滤器Filter&监听器
java·servlet·javaweb
多则惑少则明6 小时前
SpringAI框架接入-jdk升级21后报错“run failed: Unsupported class file major version 65”
java·后端·spring·springai
uup6 小时前
线程池中任务堆积与饥饿死锁问题
java
CadeCode7 小时前
SpringBoot 封装 starter
spring boot·后端·架构
LSL666_7 小时前
7 RESTful 规范
后端·restful
deng-c-f7 小时前
C/C++内置库函数(2):智能指针
java·c语言·c++
毕设源码-朱学姐7 小时前
【开题答辩全过程】以 基于SSM框架的餐厅点餐系统的设计与实现为例,包含答辩的问题和答案
java·eclipse
pursue.dreams7 小时前
Java实现企业微信机器人消息推送:文本消息与文件推送完整指南
java·机器人·企业微信
狂奔小菜鸡7 小时前
Day30 | Java集合框架之Collections工具类
java·后端·java ee