博主社群介绍: ① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。
② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。
③ 群内也有职场精英,大厂大佬,跨国企业主管,可交流技术、面试、找工作的经验。
进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬,进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。
群公告里还有全网大赛约稿汇总/博客提效工具集/CSDN自动化运营脚本 有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。
1. 导读与文章目标
1.1 文章目标
本文旨在帮助开发者在 Spring Boot 项目中掌握高级配置文件管理方法,从动态刷新、安全管理、分层加载、高级绑定到跨微服务统一管理,实现配置文件的可维护性与可扩展性。
1.2 适用读者
- 熟悉 Spring Boot 基础配置文件(properties 与 YAML)
- 有中型或大型项目开发经验
- 希望提升配置文件管理能力,解决敏感信息、安全、动态刷新等问题
2. 动态配置与热更新
2.1 Spring Boot Actuator + @RefreshScope
在传统 Spring Boot 应用中,修改 application.yml 或 application.properties 通常需要重启应用才能生效。通过 Spring Boot Actuator 与 @RefreshScope,可以实现运行时动态刷新配置。
2.1.1 示例代码:动态刷新日志级别
@RestController
@RefreshScope
public class LogController {
@Value("${logging.level.root:INFO}")
private String logLevel;
@GetMapping("/log-level")
public String getLogLevel() {
return logLevel;
}
}
-
@RefreshScope:标记的 Bean 支持运行时刷新 -
/actuator/refresh:调用刷新接口后,@Value注入值更新
图1 动态刷新流程图(Mermaid):
2.2 Spring Cloud Config 实战
- 中央配置管理:多服务共享同一配置库
- 支持 Git 或 SVN 版本控制
-
动态刷新:结合
@RefreshScope与 Actuator
3. 分层配置与配置优先级
3.1 Spring Boot 默认加载顺序
Spring Boot 从多个来源加载配置,顺序影响覆盖效果:
| 优先级 | 配置来源 |
|---|---|
| 1 | 命令行参数 |
| 2 |
SPRING_APPLICATION_JSON 环境变量 |
| 3 | ServletContext 初始化参数 |
| 4 |
application-{profile}.properties/yml(外部) |
| 5 |
application.properties/yml(外部) |
| 6 |
application-{profile}.properties/yml(类路径) |
| 7 |
application.properties/yml(类路径) |
| 8 | 默认属性(SpringApplication.setDefaultProperties) |
3.2 自定义 PropertySource
@Configuration
@PropertySource("classpath:custom-config.properties")
public class CustomConfig {
@Value("${custom.value}")
private String value;
}
3.3 Profile 覆盖策略实战
-
application-dev.yml覆盖application.yml - 同一属性在高优先级 profile 中生效
4. 配置文件安全管理
4.1 Jasypt 配置加密
spring.datasource.password=ENC(kj3h4lkj23h4lkj)
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
- 使用 Jasypt 加密敏感信息,避免明文存储
4.2 Vault / Nacos 安全方案
- Vault 支持动态生成临时数据库密码
- Nacos 支持加密配置,结合 Spring Cloud Config 使用
4.3 环境变量注入
export DB_PASSWORD=123456
- Spring Boot 自动读取
System.getenv()
5. 配置文件可维护性与规范化
5.1 配置拆分与模块化
- 按功能拆分配置文件:数据库、缓存、消息队列、接口等
- 减少冲突,提高可读性
5.2 YAML 引入与锚点技巧
default: &default-db
driver: ***.mysql.jdbc.Driver
username: root
password: 123456
dev:
<<: *default-db
url: jdbc:mysql://localhost/dev
5.3 配置文件校验与 IDE 工具
- IntelliJ IDEA 提供 YAML/Properties 校验
- Spring Boot Config Validator 提前发现配置错误
6. 高级配置绑定技巧
6.1 集合与 Map 类型绑定
servers:
- host: 127.0.0.1
port: 8080
- host: 127.0.0.2
port: 9090
@***ponent
@ConfigurationProperties(prefix="servers")
public class ServerConfig {
private List<Server> list;
public static class Server { private String host; private int port; }
}
6.2 嵌套对象与自定义类型绑定
- 支持复杂对象和多层嵌套
- 自定义类型实现
Converter绑定
6.3 不可变配置与 @ConstructorBinding
@ConfigurationProperties(prefix="app")
@ConstructorBinding
public record AppConfig(String name, int timeout) {}
- 配置对象不可变,线程安全
7. 跨微服务统一配置管理
7.1 Spring Cloud Config 架构实践
- 配置统一管理
- 支持动态刷新
7.2 Nacos / Apollo 实践
- 支持配置热更新
- 支持命名空间隔离
7.3 配置版本管理与回滚策略
- 每次配置修改自动生成版本
- 可快速回滚,降低生产风险
结束语
👨💻 关于我
持续学习 | 追求真我
如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的。想看更多 那就点个关注吧 我会尽力带来有趣的内容 😎。
掘金点击访问Qiuner CSDN点击访问Qiuner GitHub点击访问Qiuner Gitee点击访问Qiuner
| 专栏 | 简介 |
|---|---|
| 📊 一图读懂系列 | 图文并茂,轻松理解复杂概念 |
| 📝 一文读懂系列 | 深入浅出,全面解析技术要点 |
| 🌟持续更新 | 保持学习,不断进步 |
| 🎯 人生经验 | 经验分享,共同成长 |
你好,我是Qiuner. 为帮助别人少走弯路而写博客
如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 😄 (^ ~ ^) 。想看更多 那就点个关注吧 我会尽力带来有趣的内容 😎。
代码都在Github或Gitee上,如有需要可以去上面自行下载。记得给我点星星哦😍
如果你遇到了问题,自己没法解决,可以去我掘金评论区问。CSDN评论区和私信消息看不完 掘金消息少一点.
| 上一篇推荐 | 链接 |
|---|---|
| Java程序员快又扎实的学习路线 | 点击该处自动跳转查看哦 |
| 一文读懂 AI | 点击该处自动跳转查看哦 |
| 一文读懂 服务器 | 点击该处自动跳转查看哦 |
| 2024年创作回顾 | 点击该处自动跳转查看哦 |
| 一文读懂 ESLint配置 | 点击该处自动跳转查看哦 |
| 老鸟如何追求快捷操作电脑 | 点击该处自动跳转查看哦 |
| 未来会写什么文章? | 预告链接 |
|---|---|
| 一文读懂 XX? | 点击该处自动跳转查看哦 |
| 2025年终总结 | 点击该处自动跳转查看哦 |
| 一图读懂 XX? | 点击该处自动跳转查看哦 |