# 轻量级spring boot3.0 可视化管理properties和yaml配置
**Repository Path**: io123/spring-boot-propeties-web-starter
## Basic Information
- **Project Name**: 轻量级spring boot3.0 可视化管理properties和yaml配置
- **Description**: 全新自动化配置管理
全面支持spring boot 3.0,一套配置省去复杂配置参数管理,结构化配置页面,可视化配置,方便管理。
支持版本管理
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2025-04-26
- **Last Updated**: 2025-08-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Props Management Spring Boot Starter
一个功能强大的Spring Boot配置文件管理界面的Starter,支持可视化管理properties和YAML配置文件,提供在线编辑、版本管理、变更追踪和文件过滤等高级功能。
## 项目结构
本项目采用**多模块Maven架构**,便于开发和使用:
```
props-management-parent/
├── props-starter/ # 核心Starter模块
│ ├── src/main/java/ # Starter核心代码
│ ├── src/main/resources/ # Web界面和配置
│ └── pom.xml # Starter依赖配置
├── props-demo/ # 演示和测试模块
│ ├── src/main/java/ # 演示应用代码
│ ├── src/main/resources/ # 演示配置文件
│ └── pom.xml # 演示应用配置
├── pom.xml # 父项目配置
├── build-starter.sh # Starter构建脚本
└── run-demo.sh # 演示应用启动脚本
```
**模块说明**:
- **props-starter**: 可独立打包的Spring Boot Starter库
- **props-demo**: 演示应用,展示Starter的所有功能
## 功能特性
### 🏗️ 核心功能
- 📁 **配置文件管理**: 自动扫描并显示项目中的properties和YAML配置文件
- ✏️ **智能在线编辑**: 可视化编辑配置项,支持启动时/运行时配置区分
- 📝 **版本管理**: 每次修改可创建版本,支持版本备注和历史查看
- 🎨 **现代化界面**: 基于Vue3构建的美观响应式管理界面
- 🔧 **零配置启动**: 开箱即用,支持自定义配置
### 🚀 高级功能
- 🔒 **配置可编辑性控制**: 自动识别启动时配置(如server.port、数据源配置)并标记为只读
- 📊 **变更比较**: 实时显示当前配置值与最新保存版本的差异
- 💾 **前端缓存**: 自动缓存未保存的配置修改,防止意外丢失
- 🎯 **文件排除系统**: 支持多种文件排除模式,灵活控制扫描范围
- 🌐 **UTF-8编码支持**: 完整支持中文等多语言配置内容
- 📱 **响应式界面**: 支持列宽调整、悬浮提示等用户体验优化
- 🖼️ **iframe嵌入支持**: 提供API接口支持在任意外部网站中嵌入Props Management界面
## 系统要求
- Spring Boot 3.0+
- Java 17+
- Maven 3.6+
## 🚀 快速演示
### 运行内置演示
项目内置了一个完整的演示应用,包含多种类型的配置文件,可以立即体验所有功能:
**方式一:使用启动脚本(推荐)**
Linux/macOS:
```bash
./run-demo.sh
```
Windows:
```cmd
run-demo.bat
```
**方式二:手动启动**
```bash
# 1. 构建并安装Starter模块
./build-starter.sh
# 2. 启动演示应用
cd props-demo
mvn spring-boot:run -Dspring-boot.run.profiles=demo
```
演示应用启动后,访问以下地址:
- 🎯 **配置管理界面**: http://localhost:8080/props-management
- 🔧 **演示API**:
- 当前配置: http://localhost:8080/demo/config
- 健康检查: http://localhost:8080/demo/health
- 系统信息: http://localhost:8080/demo/info
### 演示功能
演示应用包含以下配置文件:
1. **application-demo.properties** - 基础配置文件,包含数据库、缓存、安全等配置
2. **config/demo-services.yml** - 复杂YAML配置,包含微服务、监控、集成等配置
3. **demo/feature-flags.properties** - 功能开关配置文件
你可以:
- ✏️ 在管理界面中修改配置值(支持中文等多语言)
- 🔒 查看启动时配置的只读保护(如server.port等)
- ⚠️ 实时查看哪些配置已被修改(黄色高亮显示)
- 💾 体验前端缓存功能(刷新页面后修改仍保留)
- 📊 查看修改后的效果(通过访问 `/demo/config` 接口)
- 💾 保存配置版本并添加备注
- 📜 查看版本历史和内容
- 🗑️ 删除不需要的版本
## 开发指南
### 构建Starter
```bash
# 构建和安装Starter到本地Maven仓库
./build-starter.sh
```
此脚本会:
1. 编译父项目和所有模块
2. 打包Starter模块
3. 安装到本地Maven仓库
4. 显示如何在其他项目中使用
### 在你的项目中使用
#### 1. 添加依赖
在你的Spring Boot项目中添加以下依赖:
```xml
com.props
props-management-spring-boot-starter
1.0.0
```
#### 2. 启动应用
无需额外配置,启动你的Spring Boot应用后访问:
```
http://localhost:8080/props-management
```
#### 3. 配置版本管理(可选)
如果需要版本管理功能,在`application.properties`中添加:
```properties
# 启用版本管理,配置版本保存目录
props.management.version-dir=/path/to/version/storage
```
## 配置说明
所有配置项都以`props.management`为前缀:
### 基础配置
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `enabled` | Boolean | `true` | 是否启用配置管理功能 |
| `version-dir` | String | 无 | 版本管理目录,不配置则不启用版本管理 |
| `scan-paths` | String[] | `["", "config/"]` | 配置文件扫描路径 |
| `management-path` | String | `/props-management` | 管理界面访问路径 |
| `allow-online-edit` | Boolean | `true` | 是否允许在线编辑 |
| `max-versions` | Integer | `10` | 最大保留版本数量 |
### 文件排除配置
支持三种文件排除方式,可灵活组合使用:
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `exclude-files` | String[] | `[]` | 排除的文件模式,支持通配符(*, ?) |
| `exclude-prefixes` | String[] | `[]` | 排除文件名前缀 |
| `exclude-suffixes` | String[] | `[]` | 排除文件名后缀 |
### 配置示例
```properties
# 基础配置
props.management.enabled=true
props.management.management-path=/admin/config
# 版本管理配置
props.management.version-dir=/data/config-versions
props.management.max-versions=20
# 扫描配置
props.management.scan-paths=,config/,custom/
props.management.allow-online-edit=true
# 文件排除配置 - 支持通配符匹配
props.management.exclude-files=test-*.properties,temp.yml,*-local.*,bootstrap.properties
# 文件排除配置 - 按前缀排除
props.management.exclude-prefixes=test-,temp-,local-,dev-
# 文件排除配置 - 按后缀排除
props.management.exclude-suffixes=-test.properties,-dev.yml,-local.yaml,-temp.properties
```
### 通配符支持
文件排除的通配符模式支持:
- `*`: 匹配任意数量的字符
- `?`: 匹配单个字符
- 精确匹配:无通配符时进行完全匹配
示例:
- `test-*.properties` - 匹配所有以`test-`开头的properties文件
- `config-?.yml` - 匹配`config-a.yml`、`config-1.yml`等
- `application-local.properties` - 精确匹配特定文件
## 使用说明
### 配置文件管理
1. **查看配置文件**: 左侧列表显示所有扫描到的配置文件
2. **选择文件**: 点击文件名查看其配置内容
3. **智能编辑**: 点击配置项的"编辑"按钮修改值
- 🔒 启动时配置(如server.port、数据源配置)显示锁定图标,无法编辑
- ✏️ 运行时配置可以正常编辑
4. **变更追踪**: 修改后的配置项会高亮显示,便于识别变更
5. **保存生效**: 修改后的配置立即生效到Spring Environment中
### 高级功能
#### 配置可编辑性控制
系统自动识别以下类型的启动时配置并设为只读:
**服务器配置**:
- `server.port`, `server.address`, `server.servlet.context-path`
**数据源配置**:
- `spring.datasource.*` (URL、用户名、密码等)
**应用配置**:
- `spring.application.name`, `spring.profiles.active`
**安全配置**:
- `management.endpoints.*`, `management.security.*`
#### 变更比较功能
- ⚠️ **修改标识**: 已修改的配置项会显示黄色警告图标
- 🔍 **悬浮提示**: 鼠标悬浮在修改的配置项上可查看原值 vs 当前值
- 📊 **统计显示**: 标题栏显示修改的配置项数量
#### 前端缓存系统
- 💾 **自动缓存**: 修改配置后自动保存到浏览器本地存储
- 🔄 **断点续传**: 页面刷新后自动恢复未保存的修改
- 📊 **缓存状态**: 实时显示当前文件和全局的缓存数量
- 🗑️ **缓存管理**: 支持清空单个文件或全部缓存
- ⚠️ **缓存提醒**: 有缓存时显示醒目的提醒条
### 版本管理
1. **保存版本**: 点击"保存版本"按钮,输入备注信息保存当前配置快照
2. **查看历史**: 点击"查看版本"查看所有历史版本
3. **版本对比**: 可查看各版本的详细内容(支持UTF-8编码)
4. **版本清理**: 超过最大版本数时自动清理旧版本
5. **缓存清理**: 保存版本后自动清空相关的前端缓存
## 界面功能
### 主界面

- **配置文件列表**: 显示文件名、类型和大小
- **配置项表格**: 展示key-value配置项,支持列宽调整
- **实时编辑**: 支持键盘快捷键(Enter保存,Esc取消)
- **可视化标识**:
- 🔒 只读配置显示锁定图标
- ⚠️ 已修改配置显示警告图标
- 💾 缓存配置显示特殊标识
### 版本管理
- **版本列表**: 显示版本号、备注和创建时间
- **版本查看**: 在新窗口查看版本内容(支持UTF-8)
- **版本删除**: 支持删除不需要的版本
### 用户体验优化
- **响应式设计**: 适配不同屏幕尺寸
- **列宽调整**: 可拖拽调整表格列宽,双击恢复默认
- **悬浮提示**: 丰富的悬浮提示信息
- **Toast通知**: 操作结果的即时反馈
- **加载状态**: 清晰的加载和错误状态提示
## 🖼️ iframe嵌入功能
Props Management提供了强大的iframe嵌入支持,允许在任意外部网站中集成配置管理界面。
### 功能特性
- ✅ **跨域支持**: 完整的CORS配置,支持从任意域名调用
- ✅ **动态路径**: 自动适配自定义管理路径配置
- ✅ **参数自定义**: 支持自定义iframe尺寸、边框、标题等
- ✅ **多种接口**: 提供HTML和JSON两种格式的API接口
- ✅ **安全沙箱**: iframe包含适当的安全属性设置
### API接口
#### 1. HTML接口(直接返回iframe代码)
```http
GET /api{管理路径}/embed?width=100%&height=600px&border=1&title=Props+Management
```
**返回**: 直接可用的iframe HTML代码
**示例**:
```bash
curl "http://localhost:8080/api/demo/props-management/embed?width=800px&height=500px"
```
#### 2. JSON接口(返回结构化数据,推荐)
```http
GET /api{管理路径}/embed-json?width=100%&height=600px&border=1&title=Props+Management
```
**返回**: JSON格式的响应,包含iframe代码和相关信息
**示例**:
```bash
curl "http://localhost:8080/api/demo/props-management/embed-json?width=800px&height=500px"
```
**响应格式**:
```json
{
"success": true,
"iframeHtml": "",
"iframeUrl": "http://localhost:8080/demo/props-management/index.html",
"managementPath": "/demo/props-management",
"baseUrl": "http://localhost:8080"
}
```
### 支持的参数
| 参数名 | 默认值 | 说明 | 示例 |
|--------|--------|------|------|
| `width` | `100%` | iframe宽度 | `800px`, `100%`, `50vw` |
| `height` | `600px` | iframe高度 | `500px`, `80vh` |
| `border` | `1` | 边框宽度(0为无边框) | `0`, `1`, `2` |
| `title` | `Props Management` | iframe标题 | `配置管理`, `My Props` |
### 使用示例
#### 方法一:直接嵌入HTML(推荐)
```html
我的网站
系统配置管理
加载中...
```
#### 方法二:使用JSON接口
```javascript
fetch('/api/demo/props-management/embed-json?width=800px&height=500px')
.then(response => response.json())
.then(data => {
if (data.success) {
// 插入iframe
document.getElementById('props-container').innerHTML = data.iframeHtml;
// 获取更多信息
console.log('Props Management URL:', data.iframeUrl);
console.log('管理路径:', data.managementPath);
console.log('基础URL:', data.baseUrl);
} else {
throw new Error(data.message || '加载失败');
}
})
.catch(error => {
console.error('Error:', error);
document.getElementById('props-container').innerHTML =
'加载失败: ' + error.message + '
';
});
```
#### 方法三:跨域调用
```javascript
// 从外部网站调用其他服务器的Props Management
fetch('http://your-props-server.com:8080/api/demo/props-management/embed-json', {
mode: 'cors', // 明确指定跨域模式
headers: {
'Accept': 'application/json'
}
})
.then(response => {
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
}
return response.json();
})
.then(data => {
if (data.success) {
document.getElementById('external-props').innerHTML = data.iframeHtml;
} else {
throw new Error(data.message);
}
})
.catch(error => {
console.error('跨域调用失败:', error);
});
```
### URL模式说明
根据`props.management.management-path`配置,API的URL模式为:
- **HTML接口**: `http://your-server:port/api{管理路径}/embed`
- **JSON接口**: `http://your-server:port/api{管理路径}/embed-json`
**示例**:
- 默认配置:`http://localhost:8080/api/props-management/embed`
- 自定义路径:`http://localhost:8080/api/demo/props-management/embed`
- 其他路径:`http://localhost:8080/api/admin/config/embed`
### 示例页面
项目提供了完整的嵌入示例页面:
- **嵌入演示**: `http://localhost:8080/demo/props-management/embed-demo.html`
- **外部集成示例**: `http://localhost:8080/demo/props-management/external-embed-example.html`
这些页面包含:
- 💡 详细的使用说明和代码示例
- 🔧 可调整参数的实时预览
- 📋 复制粘贴的代码模板
- 🌐 跨域调用的完整示例
### 安全考虑
1. **CORS配置**: 接口支持`Access-Control-Allow-Origin: *`,生产环境建议限制允许的域名
2. **iframe沙箱**: 生成的iframe包含适当的`sandbox`属性
3. **内容安全**: 嵌入的iframe遵循同源策略和安全限制
4. **访问控制**: 建议结合Spring Security等进行访问权限控制
### 常见用例
1. **管理后台集成**: 在企业管理后台中嵌入配置管理功能
2. **监控面板**: 在运维监控大屏中嵌入配置状态
3. **开发工具**: 在开发者控制台中提供配置管理入口
4. **多系统集成**: 在微服务管理平台中统一配置管理界面
5. **客户端应用**: 在桌面应用或移动应用的WebView中嵌入配置功能
## 技术架构
### 后端
- **Spring Boot Auto Configuration**: 自动配置机制
- **REST API**: 提供配置管理接口,支持UTF-8编码
- **PropertySource动态更新**: 运行时更新配置
- **文件版本管理**: 本地文件存储版本历史
- **智能配置识别**: 自动区分启动时和运行时配置
- **文件过滤引擎**: 支持多种排除模式的文件扫描
### 前端
- **Vue 3**: 现代化JavaScript框架
- **原生HTML/CSS**: 无构建依赖,直接引入CDN
- **响应式设计**: 适配不同屏幕尺寸
- **异步交互**: 基于Axios的API调用,配置UTF-8编码
- **本地存储**: LocalStorage实现前端缓存
- **交互优化**: 丰富的用户界面交互功能
## 安全考虑
1. **生产环境**: 建议通过Spring Security等限制访问权限
2. **敏感配置**: 谨慎编辑包含密码等敏感信息的配置
3. **版本管理**: 版本文件可能包含敏感信息,注意存储目录权限
4. **启动时配置保护**: 自动保护关键的启动时配置,避免误操作
5. **文件排除**: 可排除测试、临时等敏感配置文件
### 扩展开发
可以通过以下方式扩展功能:
1. **自定义配置解析器**: 实现特定格式的配置文件解析
2. **权限控制**: 集成Spring Security实现访问控制
3. **审计日志**: 记录配置修改的详细日志
4. **集群同步**: 实现多实例间的配置同步
5. **自定义排除规则**: 扩展文件排除逻辑
6. **国际化支持**: 扩展多语言界面支持
## 常见问题
### Q: 修改配置后没有生效?
A: 确保`allow-online-edit`配置为`true`