# 配置版本管理模块 - 快速开始 ## 5分钟快速上手 ### 步骤1: 创建数据库表 (1分钟) 在MySQL数据库中执行以下SQL: ```sql -- 配置版本表 CREATE TABLE `config_version` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `name` varchar(100) DEFAULT NULL COMMENT '名称', `app_code` varchar(50) DEFAULT NULL COMMENT '应用编码', `key` varchar(100) DEFAULT NULL COMMENT '键值', `version` varchar(50) DEFAULT NULL COMMENT '版本号', `status` int(11) DEFAULT '0' COMMENT '状态:0-禁用,1-启用', `owner_by` bigint(20) DEFAULT NULL COMMENT '所有者', `create_by` bigint(20) DEFAULT NULL COMMENT '创建人', `update_by` bigint(20) DEFAULT NULL COMMENT '更新人', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `is_delete` tinyint(1) DEFAULT '0' COMMENT '是否删除:0-未删除,1-已删除', `enabled` tinyint(1) DEFAULT '1' COMMENT '是否启用:0-禁用,1-启用', `sort` int(11) DEFAULT '0' COMMENT '排序', PRIMARY KEY (`id`), KEY `idx_app_code` (`app_code`), KEY `idx_key` (`key`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='配置版本表'; ``` 或者执行项目中的SQL文件: ```bash mysql -u your_username -p your_database < storlead-knowledge/sql/config_version.sql ``` ### 步骤2: 编译项目 (2分钟) 在项目根目录执行: ```bash cd E:\workspace\storlead-sasa-platform mvn clean install -DskipTests ``` ### 步骤3: 启动应用 (1分钟) 启动包含knowledge模块的Spring Boot应用。 ### 步骤4: 测试API (1分钟) #### 方式1: 使用Swagger UI 访问: `http://localhost:8080/doc.html` 找到"知识库: 配置版本管理"分组,即可看到所有接口。 #### 方式2: 使用curl命令 **保存配置版本:** ```bash curl -X POST http://localhost:8080/knowledge/config-version/save \ -H "Content-Type: application/json" \ -d '{ "name": "数据库连接配置", "appCode": "USER_SERVICE", "key": "db.connection.url", "version": "1.0.0", "status": 1 }' ``` **查询配置版本列表:** ```bash curl -X GET "http://localhost:8080/knowledge/config-version/page?pageIndex=1&pageSize=10" ``` **根据应用编码和键值查询:** ```bash curl -X GET "http://localhost:8080/knowledge/config-version/by-app-key?appCode=USER_SERVICE&key=db.connection.url" ``` ## 常用场景示例 ### 场景1: 为微服务管理配置版本 ```bash # 为用户服务添加配置 curl -X POST http://localhost:8080/knowledge/config-version/save \ -H "Content-Type: application/json" \ -d '{ "name": "用户服务数据库URL", "appCode": "user-service", "key": "spring.datasource.url", "version": "1.0.0", "status": 1 }' # 为订单服务添加配置 curl -X POST http://localhost:8080/knowledge/config-version/save \ -H "Content-Type: application/json" \ -d '{ "name": "订单服务Redis地址", "appCode": "order-service", "key": "spring.redis.host", "version": "1.0.0", "status": 1 }' ``` ### 场景2: 查询某个应用的所有配置 ```bash curl -X GET "http://localhost:8080/knowledge/config-version/page?pageIndex=1&pageSize=100&appCode=user-service" ``` ### 场景3: 搜索包含特定关键词的配置 ```bash curl -X GET "http://localhost:8080/knowledge/config-version/page?pageIndex=1&pageSize=10&keyword=database" ``` ### 场景4: 更新配置版本 ```bash # 先查询获取ID curl -X GET "http://localhost:8080/knowledge/config-version/by-app-key?appCode=USER_SERVICE&key=db.connection.url" # 然后更新(假设ID为1) curl -X PUT http://localhost:8080/knowledge/config-version/update \ -H "Content-Type: application/json" \ -d '{ "id": 1, "name": "数据库连接配置", "appCode": "USER_SERVICE", "key": "db.connection.url", "version": "2.0.0", "status": 1 }' ``` ## 代码中使用 ### 在Service中注入并使用 ```java @Service public class YourService { @Resource private ConfigVersionService configVersionService; public void example() { // 1. 根据应用编码和键值获取配置 ConfigVersionEntity config = configVersionService.getByAppCodeAndKey("USER_SERVICE", "db.url"); // 2. 保存新配置 ConfigVersionDTO dto = new ConfigVersionDTO(); dto.setName("新配置"); dto.setAppCode("MY_APP"); dto.setKey("my.key"); dto.setVersion("1.0.0"); dto.setStatus(1); configVersionService.saveByDTO(dto); // 3. 分页查询 IPage page = configVersionService.pageVO(1, 10, "USER_SERVICE", null); } } ``` ### 在Controller中添加自定义接口 ```java @RestController @RequestMapping("/your-path/") public class YourController { @Resource private ConfigVersionService configVersionService; @GetMapping("config/{appCode}/{key}") public Result getConfig(@PathVariable String appCode, @PathVariable String key) { ConfigVersionEntity config = configVersionService.getByAppCodeAndKey(appCode, key); return Result.ok(config); } } ``` ## 常见问题 ### Q1: 为什么保存后createTime和updateTime自动填充了? A: 因为Entity继承了SysBaseField,框架会自动填充这些字段。 ### Q2: 如何实现逻辑删除? A: 调用`removeById()`方法时,框架会自动将`is_delete`字段设置为1,而不是真正删除数据。 ### Q3: 如何添加自定义查询条件? A: 在Service实现类中使用LambdaQueryWrapper构建查询条件。 ### Q4: DTO和Entity有什么区别? A: - DTO用于接收前端数据,包含验证注解 - Entity用于数据库持久化,包含MyBatis Plus注解 - 两者通过Orika自动映射转换 ### Q5: 如何添加事务支持? A: 在Service方法上添加`@Transactional`注解。 ## 下一步 1. 阅读完整文档: `CONFIG_VERSION_README.md` 2. 查看创建总结: `CREATE_SUMMARY.md` 3. 运行单元测试了解更多信息 4. 根据业务需求扩展功能 ## 需要帮助? - 查看完整的API文档(Swagger) - 阅读源码注释 - 参考其他模块的实现方式