Spring Boot 配置文件

什么是配置文件?

类比手机的设置界面

  • 大部分软件都需要用户自定义设置功能,比如字体大小、主题颜色。
  • 如果在代码中写死这些值(硬编码),所有用户设备上的值都是一样的,不够灵活。
  • 配置文件的作用:将这些可能变化的设置集中在外部文件里,程序启动时自动读取配置的数值。
Spring Boot 支持的配置文件格式
1. application.properties(旧版)

特点:简单键值对,类似外卖菜单

javascript 复制代码
# 设置服务端口号(类似手机设置中的音量)
server.port=8080

# 数据库连接配置(类似保存 WiFi 密码)
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=123456

优点 :语法简单,适合固定配置
缺点 :配置项多时会有重复前缀(如 spring.datasource.xxx)。

2. application.yml / application.yaml(新版)

特点:树状结构,类似文件夹层级

java 复制代码
# 类似结构化的手机设置菜单
server:
  port: 8080  # 端口号

spring:
  datasource:  # 数据库配置(类似"网络设置"大分类)
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: 123456

student:
  id: 1001
  name: 小明

优点 :层次清晰,无重复前缀
缺点:严格缩进(类似 Python),填错缩进程序报错。

如何读取配置?
通过 @Value 读取单个值(简单方便)
java 复制代码
@Value("${server.port}")  // 读取配置中的端口号
private int port;

@RequestMapping("/showPort")
public String showPort() {
    return "当前服务端口是:" + port;
}
通过 @ConfigurationProperties 读取对象(适合复杂配置)
java 复制代码
# 配置学生信息(类似用户个人信息)
student:
  id: 1001
  name: 小明
java 复制代码
@Data
@Component
@ConfigurationProperties(prefix = "student")  // 绑定前缀
public class Student {
    private int id;
    private String name;
}

@RestController
public class StudentController {
    @Autowired
    private Student student;

    @RequestMapping("/studentInfo")
    public String getInfo() {
        return "学生ID:" + student.getId() + ",姓名:" + student.getName();
    }
}
为什么需要两种配置格式?
  • 迁移成本 :早期项目用 .properties,新项目更推荐 .yml
  • 团队习惯:YAML 格式层次清晰,但在复杂配置中可能不如 Properties 直观。
示例:验证码配置
配置文件中定义参数
java 复制代码
# 验证码参数配置(像素宽高、Session 存储的 Key)
captcha:
  width: 200
  height: 100
  session:
    key: CAPTCHA_CODE
Java 代码读取配置
java 复制代码
@Data
@Component
@ConfigurationProperties(prefix = "captcha")
public class CaptchaConfig {
    private int width;
    private int height;
    private Session session;

    @Data
    public static class Session {
        private String key;
    }
}

@RestController
public class CaptchaController {
    @Autowired
    private CaptchaConfig config;

    @Autowired
    private HttpSession session;

    @GetMapping("/captcha")
    public void generateCaptcha() {
        // 用 Hutool 生成验证码图片,存入 Session
        LineCaptcha captcha = CaptchaUtil.createLineCaptcha(config.getWidth(), config.getHeight());
        session.setAttribute(config.getSession().getKey(), captcha.getCode());
        captcha.write(response.getOutputStream());  // 返回图片给前端
    }
}
总结
  • 用途propertiesyml 都是为了让程序更灵活,不用改代码就能调整参数。
  • 对比
    • properties:类似简单列表,适合少量配置。
    • yml:类似树状菜单,适合多层结构。
  • 选择建议 :新项目统一用 .yml,旧项目按习惯维护。
相关推荐
一定要AK4 小时前
Spring 入门核心笔记
java·笔记·spring
A__tao4 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
KevinCyao4 小时前
java视频短信接口怎么调用?SpringBoot集成视频短信及回调处理Demo
java·spring boot·音视频
科技小花4 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸4 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain4 小时前
linux个人心得22 (mysql)
数据库·mysql
迷藏4944 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
總鑽風5 小时前
搭建Spring Boot + ELK日志平台,实现可视化日志监控
spring boot·elk·macos
阿里小阿希5 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神5 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle